案例分析-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;
}
@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);
}
}
代码解释:
-
排序并取前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 个值。