通过java8对list进行筛选,只保留一条优先级最高的对象,想通过枚举类进行代码实现
时间: 2024-03-04 17:48:03 浏览: 71
java8实现list集合中按照某一个值相加求和,平均值等操作代码
可以通过 Java 8 的 Stream API 和枚举类来实现:
```java
// 假设你有一个 List<MyData> 数据集合
List<MyData> dataList = ...
// 枚举类 Priority 表示优先级
enum Priority {
HIGH, MEDIUM, LOW
}
// 根据优先级排序,只保留一条优先级最高的数据
Optional<MyData> result = Arrays.stream(Priority.values())
.map(priority -> dataList.stream().filter(data -> data.getPriority() == priority).findFirst())
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
```
在这个例子中,我们首先定义了一个枚举类 Priority,表示优先级。然后使用 Stream API 对 Priority 进行遍历,使用 `map()` 方法将每个枚举值转换成一个 Optional<MyData> 类型的对象,表示 dataList 中优先级等于该枚举值的第一个元素。使用 `filter()` 方法过滤掉空的 Optional 对象,使用 `map()` 方法将 Optional<MyData> 类型的对象转换成 MyData 类型的对象。最后使用 `findFirst()` 方法获取排序后的第一个元素,也就是优先级最高的那个元素。使用 Optional 类型来包装结果,因为 dataList 可能为空。如果 dataList 中没有元素,`result.isPresent()` 会返回 false。
这种方式通过枚举类来实现了优先级的筛选,并且使用了 Java 8 的函数式编程思想,代码简洁、可读性强,推荐使用。
阅读全文