案例分析-Stream List 中取出值最大的前 5 个和最小的 5 个值

List<Aaa> 中取出 value 最大的前 5 个和最小的 5 个值

要从 List<Aaa> 中取出 value 最大的前 5 个和最小的 5 个值,我们可以使用 Java 8 的流(Stream)API 来实现。

代码示例:

java 复制代码
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

class Aaa {
    private BigDecimal value;

    public Aaa(BigDecimal value) {
        this.value = value;
    }

    public BigDecimal getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "Aaa{" + "value=" + value + '}';
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建一个测试列表
        List<Aaa> list = Arrays.asList(
                new Aaa(new BigDecimal("10")),
                new Aaa(new BigDecimal("20")),
                new Aaa(new BigDecimal("5")),
                new Aaa(new BigDecimal("15")),
                new Aaa(new BigDecimal("25")),
                new Aaa(new BigDecimal("2")),
                new Aaa(new BigDecimal("30")),
                new Aaa(new BigDecimal("12")),
                new Aaa(new BigDecimal("50")),
                new Aaa(new BigDecimal("3"))
        );

        // 取出前5个最大的
        List<Aaa> top5Max = list.stream()
                .sorted(Comparator.comparing(Aaa::getValue).reversed()) // 按 value 降序排列
                .limit(5) // 取前 5 个
                .collect(Collectors.toList());

        // 取出前5个最小的
        List<Aaa> top5Min = list.stream()
                .sorted(Comparator.comparing(Aaa::getValue)) // 按 value 升序排列
                .limit(5) // 取前 5 个
                .collect(Collectors.toList());

        // 打印结果
        System.out.println("最大前5个: " + top5Max);
        System.out.println("最小前5个: " + top5Min);
    }
}

代码解释:

  1. 排序并取前5个最大值

    • 使用 stream() 创建流。
    • 使用 Comparator.comparing(Aaa::getValue).reversed()value 值按降序排序。
    • 使用 limit(5) 限制结果为前 5 个。
    • 使用 collect(Collectors.toList()) 将结果转换为列表。
  2. 排序并取前5个最小值

    • 使用 Comparator.comparing(Aaa::getValue) 按升序排列。
    • limit(5) 限制结果为前 5 个。

输出示例:

最大前5个: [Aaa{value=50}, Aaa{value=30}, Aaa{value=25}, Aaa{value=20}, Aaa{value=15}]
最小前5个: [Aaa{value=2}, Aaa{value=3}, Aaa{value=5}, Aaa{value=10}, Aaa{value=12}]

这段代码可以根据 Aaa 对象的 value 属性,提取出最大和最小的前 5 个值。

相关推荐
熬夜学编程的小王1 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list
阿史大杯茶1 小时前
AtCoder Beginner Contest 381(ABCDEF 题)视频讲解
数据结构·c++·算法
Chris _data2 小时前
二叉树oj题解析
java·数据结构
Lenyiin3 小时前
02.06、回文链表
数据结构·leetcode·链表
爪哇学长3 小时前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
爱摸鱼的孔乙己3 小时前
【数据结构】链表(leetcode)
c语言·数据结构·c++·链表·csdn
烦躁的大鼻嘎3 小时前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
C++忠实粉丝4 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
daiyang123...5 小时前
测试岗位应该学什么
数据结构
kitesxian5 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode