Java 按筛选器查找项目或获取任何

Java 按筛选器查找项目或获取任何,java,java-8,java-stream,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 .orElseF

我有一个对象集合,我需要找到一个特定的对象,如果找不到,则返回任何对象或第一个对象

例如:

@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();

你能给我提供一些来自Java8的漂亮的解决方案吗?谢谢。

您可以这样做,如果有匹配的,返回第一个匹配的,否则选择随机的

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

你可以这样做,如果你有任何匹配的,返回第一个匹配的,否则选择随机的

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

如果未找到,请返回任何或第一个。-没有太多的意义,IMHO,任何可以包括第一以及。如果没有找到返回任何或第一。-没什么意义,任何人也可以先包括在内。你认真对待“任何人”…只要
get(0)
就足够了。你认真对待“任何人”…只要
get(0)
就足够了。