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

相关推荐
望舒51311 分钟前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
独好紫罗兰22 分钟前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
铉铉这波能秀39 分钟前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
踢足球092942 分钟前
寒假打卡:2026-2-8
数据结构·算法
老赵说1 小时前
Java基础数据结构全面解析与实战指南:从小白到高手的通关秘籍
数据结构
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
静听山水2 小时前
Redis核心数据结构-ZSet
数据结构·redis
铉铉这波能秀2 小时前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary
Queenie_Charlie3 小时前
stars(树状数组)
数据结构·c++·树状数组
静听山水3 小时前
Redis核心数据结构-Set
数据结构·数据库·redis