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);}
}
代码解释:
-
排序并取前5个最大值:
- 使用
stream()
创建流。 - 使用
Comparator.comparing(Aaa::getValue).reversed()
将value
值按降序排序。 - 使用
limit(5)
限制结果为前 5 个。 - 使用
collect(Collectors.toList())
将结果转换为列表。
- 使用
-
排序并取前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 个值。