我收集了一些需要查找特定对象的对象,如果找不到,则返回任何对象或第一个对象。
例如:
@Getter
@Setter
public class Foo {
Long id;
FooType type;
}
我想做这样的事情:
Foo foo = setOfFoos.stream()
.filter(f -> f.getType() == TYPE_A)
// not found my type, return any
.orElseFirst();
您能为我提供一些来自Java 8的不错的解决方案吗?谢谢。
答案 0 :(得分:2)
您可以通过这种方式进行操作,如果有任何匹配项,则返回第一个匹配项,否则请随机选择一个
foo.stream()
.filter(f -> f.getType() == TYPE_A)
.findFirst()
.orElse(foo.get(ThreadLocalRandom.current().nextInt(foo.size())));
或者,如果不满足过滤条件,您还可以获取第一个元素
foo.stream()
.filter(f -> f.getType() == TYPE_A)
.findFirst()
.orElse(foo.get(0));