通过过滤器查找项目或获取任何内容

时间:2019-09-19 21:12:17

标签: java java-8 java-stream

我收集了一些需要查找特定对象的对象,如果找不到,则返回任何对象或第一个对象。

例如:

@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的不错的解决方案吗?谢谢。

1 个答案:

答案 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));