是否有一个方法可以找到具有条件的第一个匹配元素在Java 8中的列表中,如C#Enumerable#First和Scala List#find?

Ryo*_*shi 2 java java-8

就像C#LINQ Enumerable一样#First with delegate方法和Scala List #ref方法,在Java8中,是否有一种方法可以找到列表中第一个匹配的元素?

Roh*_*ain 6

是的,使用Stream#findFirst()方法:

List<String> list = Arrays.asList("a", "ab", "bc", "abc");
String firstMatch = list.stream().filter(s -> s.length() == 2).findFirst().get();
Run Code Online (Sandbox Code Playgroud)

  • @muhron为什么你坚持使用单一方法?关键是,单一方法应该只做一件事.你可以将`filter`和`findFirst`方法合二为一,但那时不会是一个非常模块化的设计.无法重复使用这些方法.API的设计考虑了这些因素.当然,它们不能根据用户的需要预先烹饪. (2认同)

Lou*_*man 6

list.stream().filter(predicate).findFirst();
Run Code Online (Sandbox Code Playgroud)

  • 为什么它是两种方法而不是一种方法呢?API的重点是提供一些构建块,您可以将它们粘在一起以执行任何操作; 试图为每种可能的操作组合提供一种方法是荒谬的. (2认同)
  • 一种方法是无法实现的,这种方法倾向于倾向于选择仍然可以组合以实现其所需的一切的最小API. (2认同)