Java 8 中 Stream 类引入了许多新的函数式操作,其中包括 findFirst() 和 ifPresent()。
findFirst() 是 Stream 中的一个终止操作,它返回 Stream 中的第一个元素(如果 Stream 不为空),否则返回一个 Optional 对象。
ifPresent() 是 Optional 类的一个方法,它接受一个 Consumer 接口的实例作为参数,并在 Optional 对象非空时执行该接口的实现。
因此,结合起来使用,可以通过 Stream 找到第一个符合条件的元素,并对其执行相应的操作。示例代码如下:
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
list.stream()
.filter(s -> s.startsWith("b"))
.findFirst()
.ifPresent(s -> System.out.println("找到第一个以 b 开头的单词:" + s));
上述代码中,我们将一个字符串列表转换为一个 Stream,然后使用 filter() 方法筛选出以 "b" 开头的单词,接着使用 findFirst() 方法获取第一个符合条件的单词(如果有的话),最后使用 ifPresent() 方法对该单词执行相应的操作,即输出一个信息。
需要注意的是,如果 Stream 中没有符合条件的元素,findFirst() 方法会返回一个空的 Optional 对象,因此在使用 ifPresent() 方法之前,需要先对 Optional 对象进行空值检查,以避免 NullPointerException 异常。