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

相关推荐
:-)2 小时前
基础算法-选择排序
数据结构·算法·排序算法
粘稠的浆糊2 小时前
[AtCoder - abc465_d ]X to Y题解
数据结构·c++·算法
海清河晏1112 小时前
数据结构 | 二叉平衡搜索树
开发语言·数据结构·visual studio
兰令水3 小时前
hot100【acm版】【2026.7.11/12打卡-java版本】
java·开发语言·数据结构·算法·职场和发展
叩码以求索4 小时前
使用next数组加速匹配过程
java·数据结构·算法
小欣加油5 小时前
leetcode1331 数组序号转换
数据结构·c++·算法·leetcode·职场和发展
阿米亚波5 小时前
【C++ STL】std::deque
数据结构·c++·笔记·算法·stl
:-)6 小时前
基础算法-插入排序
数据结构·算法·排序算法
gumichef6 小时前
排序专题(插入,)
数据结构·算法·排序算法
Hesionberger7 小时前
动态规划与二分法破解最长递增子序列
java·数据结构·python·算法·leetcode