案例分析-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 个值。

相关推荐
AitTech1 小时前
C#编程:List.ForEach与foreach循环的深度对比
开发语言·c#·list
涅槃寂雨2 小时前
C语言小任务——寻找水仙花数
c语言·数据结构·算法
『往事』&白驹过隙;2 小时前
操作系统(Linux Kernel 0.11&Linux Kernel 0.12)解读整理——内核初始化(main & init)之缓冲区的管理
linux·c语言·数据结构·物联网·操作系统
就爱学编程2 小时前
从C语言看数据结构和算法:复杂度决定性能
c语言·数据结构·算法
半桔2 小时前
栈和队列(C语言)
c语言·开发语言·数据结构·c++·git
墨楠。3 小时前
数据结构学习记录-树和二叉树
数据结构·学习·算法
Aqua Cheng.4 小时前
MarsCode青训营打卡Day10(2025年1月23日)|稀土掘金-147.寻找独一无二的糖葫芦串、119.游戏队友搜索
java·数据结构·算法
qy发大财4 小时前
平衡二叉树(力扣110)
数据结构·算法·leetcode·职场和发展
佳心饼干-4 小时前
数据结构-栈
开发语言·数据结构
OliverH-yishuihan5 小时前
C++ list 容器用法
c++·windows·list