博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java 8 新特性】Java Stream通过findAny()返回任意一条数据
阅读量:3759 次
发布时间:2019-05-22

本文共 2921 字,大约阅读时间需要 9 分钟。

StreamfindAny方法选择该流中的任何元素。

findAny方法的行为是不确定的,它可以自由选择流中的任何元素。

findAny方法有助于在并行操作中获得最大的性能,但它不能保证每次调用都得到相同的结果。

java doc中的findAny()方法声明

Optional
findAny()

上述方法返回java.util.Optional,一个容器对象,可能包含也可能不包含非空值。

当方法在流中选择null值时,findAny抛出NullPointerException

如果每次都要选择第一个元素,请使用StreamfindFirst()方法。

下面是findAny的示例。

示例1

假设我们有一个整数流。

Stream.of(10, 20, 30).findAny()  .ifPresent(s -> System.out.println(s));

调用findAny方法时,可以自由选择流中的任何元素,这意味着findAny可以给出10、20或30的输出。

再看一组例子

FindAnyDemo1.java

package com.concretepage;import java.util.Arrays;import java.util.List;public class FindAnyDemo1 {
public static void main(String[] args) {
List
list = Arrays.asList("Mahesh", "Suresh", "Mohit"); String output = list.stream() .filter(e -> e.startsWith("M")) .findAny() .orElse("NA"); System.out.println(output); List
numList = Arrays.asList(21, 22, 23, 24); numList.stream() .filter(n -> n % 2 == 0) .findAny() .ifPresent(e -> System.out.println(e)); }}

输出

Mahesh22

查看上面的代码行

list.stream().filter(e -> e.startsWith("M"))

过滤后流中包含“Mahesh”、“Mohit”。findAny可以自由选择其中任何一个。所以,如果我们多次运行这个例子,输出并不一定每次都相同。

示例2

下面是使用IntStreamLongStreamDoubleStreamfindAny方法示例。

FindAnyDemo2.java

package com.concretepage;import java.util.stream.DoubleStream;import java.util.stream.IntStream;import java.util.stream.LongStream;public class FindAnyDemo2 {
public static void main(String[] args) {
IntStream intStream = IntStream.of(10, 20, 30, 40); intStream.filter(i -> i > 20).findAny() .ifPresent(i -> System.out.println(i)); LongStream longStream = LongStream.of(100, 200, 300); longStream.filter(l -> l < 250).findAny() .ifPresent(l -> System.out.println(l)); DoubleStream doubleStream = DoubleStream.of(100.52, 200.55, 300.66); doubleStream.filter(d -> d > 200).findAny() .ifPresent(l -> System.out.println(l)); }}

输出

30100200.55

示例3

findAny方法提高了并行流的性能,但我们要知道,重新运行时输出可能会有所不同。

FindAnyDemo3.java

package com.concretepage;import java.util.ArrayList;import java.util.List;public class FindAnyDemo3 {
public static void main(String[] args) {
List
list = new ArrayList<>(); list.add(new Employee("Emp A", 3000)); list.add(new Employee("Emp B", 4000)); list.add(new Employee("Emp C", 5000)); list.add(new Employee("Emp D", 6000)); list.parallelStream() .filter(e -> e.getSal() >= 4000 && e.getSal() <= 5000) .mapToInt(e -> e.getSal()) .findAny() .ifPresent(s -> System.out.println(s)); }}class Employee {
private String name; private int sal; public Employee(String name, int sal) {
this.name = name; this.sal = sal; } //Sets and Gets}

输出

5000

示例4

如果findAny方法选择null值,则抛出NullPointerException

FindAnyDemo4.java

package com.concretepage;import java.util.stream.Stream;public class FindAnyDemo4 {
public static void main(String[] args) {
Stream.of(null, "AA"). findAny().ifPresent(s -> System.out.println(s)); }}

输出将为NullPointerException

参考文献

转载地址:http://uagsn.baihongyu.com/

你可能感兴趣的文章
员工管理系统五:增删改员工实现
查看>>
Redis的安装与卸载
查看>>
项目阶段五:验证码
查看>>
项目阶段五:购物车
查看>>
项目阶段六:订单模块的数据库准备与dao、service层
查看>>
项目阶段六:后台管理的订单模块
查看>>
练习——图书管理系统八(根据图书编号填充图书名称下拉控件和验证手机号)
查看>>
将windows下文件上传至服务器中
查看>>
正则表达式:贪婪模式与懒惰模式
查看>>
机器学习之sklearn.preprocessing.LabelBinarizer()的用法
查看>>
决策树剪枝的思想
查看>>
创建二叉树和遍历二叉树
查看>>
算法训练 区间k大数查询
查看>>
算法训练 K好数
查看>>
2021北京交通大学计算机专硕初试经验分享
查看>>
2021北京交通大学计算机专硕复试经验分享
查看>>
简单实现一个数组、链表
查看>>
关于从其他程序切回word文档时卡顿问题的解决办法
查看>>
Linux安装Java环境
查看>>
Java集合 ArrayList原理
查看>>