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

相关推荐
AlexMercer10123 分钟前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
^^为欢几何^^2 小时前
lodash中_.difference如何过滤数组
javascript·数据结构·算法
X同学的开始5 小时前
数据结构之二叉树遍历
数据结构
AIAdvocate8 小时前
Pandas_数据结构详解
数据结构·python·pandas
jiao000018 小时前
数据结构——队列
c语言·数据结构·算法
kaneki_lh8 小时前
数据结构 - 栈
数据结构
铁匠匠匠8 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond8 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
CV工程师小林10 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先