我有一个类型的有效值的列表:
Set<String> validTypes = ImmutableSet.of("TypeA", "TypeB", "TypeC");
Run Code Online (Sandbox Code Playgroud)
我想从给定的列表中提取具有有效类型的第一个值。在这种情况下,我会写这种东西:
public class A{
private String type;
private String member;
}
List<A> classAList;
classAList.stream()
.filter(a -> validTypes.contains(a.getType()))
.findFirst();
Run Code Online (Sandbox Code Playgroud)
但是我想优先考虑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();
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
按类型过滤列表,按类型排序,收集到列表,然后只获取第一个元素
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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |