Java Stream findFirst/findAny
最后修改于 2025 年 5 月 25 日
在本文中,我们将展示如何在 Java 流中查找第一个或任意元素。
Java Stream
Java Stream 是一个元素序列,它源自支持聚合操作的数据源。与集合不同,流不存储元素;相反,它们按需处理和计算元素。流通常用于处理来自集合、数组或 I/O 资源等源的数据,从而实现高效的处理和转换。
findFirst
方法检索流的第一个元素,并将其包装在 Optional
中返回。如果流为空,则返回一个空的 Optional
。当顺序很重要时,此方法很有用,可确保选择第一个可用项。
findAny
方法从流中检索任意元素,并将其包装在 Optional
中返回。如果流为空,则返回一个空的 Optional
。当处理并行流时,此方法特别有用,因为它允许检索任何可用元素而不保证顺序。
这两种方法都有助于安全地从流中提取元素,而不会在处理空数据集时导致异常,这使得它们对于 Java 中的函数式编程方法很有价值。
Java Stream findFirst 示例
在下一个示例中,我们将使用 findFirst
方法。
Main.java
void main() { var words = List.of("war", "cup", "cloud", "alert", "be", "ocean", "book"); var empty = List.of(); var first = words.stream().findFirst().orElse("not found"); System.out.println(first); var first2 = empty.stream().findFirst().orElse("not found"); System.out.println(first2); }
我们查找单词列表的第一个元素。
var words = List.of("war", "cup", "cloud", "alert", "be", "ocean", "book"); var empty = List.of();
我们有两个字符串列表。一个有七个单词,另一个是空的。
var first = words.stream().findFirst().orElse("not found");
我们找到列表的第一个元素。如果未找到任何元素,我们返回 "not found" 字符串。
$ java Main.java war not found
在第二个示例中,我们过滤一个单词列表,然后找到它的第一个匹配元素。
Main.java
void main() { var words = List.of("war", "cup", "cloud", "alert", "be", "water", "warm", "ocean", "book"); var first = words.stream().filter(e -> e.startsWith("w")) .findFirst().orElse("not found"); System.out.println(first); }
在示例中,我们找到第一个以 "w" 开头的单词。
$ java Main.java war
Java Stream findAny 示例
在下一个示例中,我们将使用 findAny
方法。
Main.java
void main() { var words = List.of( new User("John Doe", "gardener"), new User("Roger Roe", "driver"), new User("Jozef Kral", "shopkeeper"), new User("Boris Brezov", "musician"), new User("Lucia Novak", "teacher")); var res = words.stream().filter(u -> u.occupation().equals("gardener")) .findAny(); res.ifPresent(System.out::println); } record User(String name, String occupation) { }
我们有一个用户列表。我们找出是否有任何用户是园丁。
User[name=Roger Roe, occupation=driver]
来源
在本文中,我们介绍了 Java Stream findFirst
和 findAny
方法。
作者
列出所有Java教程。