欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 案例分析-Stream List 中取出值最大的前 5 个和最小的 5 个值

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

2024/10/25 0:28:44 来源:https://blog.csdn.net/ahauedu/article/details/142367547  浏览:    关键词:案例分析-Stream List 中取出值最大的前 5 个和最小的 5 个值

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

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

代码示例:

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;}@Overridepublic 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 个值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com