java - 根据优先级过滤列表中的值
问题描述
我有一个类型的有效值列表:
Set<String> validTypes = ImmutableSet.of("TypeA", "TypeB", "TypeC");
从给定的列表中,我想提取具有有效类型的第一个值。在这种情况下,我会写这样的东西:
public class A{
private String type;
private String member;
}
List<A> classAList;
classAList.stream()
.filter(a -> validTypes.contains(a.getType()))
.findFirst();
但是,我想优先考虑TypeA
,即如果classAList
有TypeA
并且TypeB
,我想要拥有的对象typeA
。要做到这一点,我的一种方法是:
Set<String> preferredValidTypes = ImmutableSet.of("TypeA");
classAList.stream()
.filter(a -> preferredValidTypes.contains(a.getType()))
.findFirst()
.orElseGet(() -> {
return classAList.stream()
.filter(a -> validTypes.contains(a.getType()))
.findFirst();
}
有更好的方法吗?
解决方案
按类型过滤列表,按类型排序,收集到列表,然后只获取第一个元素
List<A> collect = classAList.stream()
.filter(a -> validTypes.contains(a.getType()))
.sorted(Comparator.comparing(A::getType))
.collect(Collectors.toList());
System.out.println(collect.get(0));
推荐阅读
- javascript - 在 TypeScript 中扩展一个类并编译为 es5
- c# - 如何在 wpf 中创建具有固定宽度和灵活高度的布局?
- javascript - 输入框中动态占位符的转换
- python - 替换 Tkinter Text 小部件中的特定单词
- node.js - 角度安装cli errno -13
- r - 增加ggplot标题中的下划线大小
- node.js - 使用关系保存数据(Nodejs / loopback 4 / mongoDB)
- python - 如果给定的“值”在python字典中匹配,则打印“键”
- python - 根据现有列是否包含该 dict 值作为子字符串,创建一列,其中每行的值是指定 dict 的键?
- java - 计算java中第一个参数的长度