问题:查找满足断言的第一个元素

我刚刚开始使用Java 8的lambdas,我尝试去实现一些我在函数式语言里面经常用的

例如,大部分的函数式语言里有一些查找函数,针对序列或者list进行操作,返回使得断言为真的第一个元素。我唯一知道可以在Java8里面实现的就是:

lst.stream().filter(x -> x > 5).findFirst()

但是这对于我来说似乎效率不高,这个filter会扫描整个list,至少在我的理解上是这样的,这有可能是错误的,是不是有更好的方法。

回答一

return dataSource.getParkingLots().stream().filter(parkingLot -> Objects.equals(parkingLot.getId(), id)).findFirst().orElse(null);

我能filter出在对象列表里面唯一的那个对象,所以我经常用这个,希望可以帮到你吧

回答二

不是的,filter不用扫描整个stream的。它是一个中间操作,会返回一个lazy stream(事实上,所有的中间操作都会返回一个lazy stream)。为了说服你,你可以做一下下面的测试

List<Integer> list = Arrays.asList(1, 10, 3, 7, 5);
int a = list.stream().peek(num -> System.out.println("will filter " + num)).filter(x -> x > 5).findFirst().get();
System.out.println(a);

输出:

will filter 1
will filter 10
10

你可以看到它只处理了流的前两个元素。所以你可以采取这个非常好的方法的

回答三

@AjaxLeung已经回答了, 但是已经很难在评论中找到了.
只是用来检查

lst.stream().filter(x -> x > 5).findFirst().isPresent()

可以被简化为

lst.stream().anyMatch(x -> x > 5)

文章翻译自Stack Overflow:https://stackoverflow.com/questions/23696317/find-first-element-by-predicate

查找满足断言的第一个元素相关推荐

  1. 通过谓词查找第一个元素

    本文翻译自:Find first element by predicate I've just started playing with Java 8 lambdas and I'm trying t ...

  2. python中prime_在AP中查找第一个元素,该元素是Python中给定Prime的倍数

    假设我们有一个AP系列的第一项(A)和共同差(d),并且我们还有素数P,我们必须找到给定AP中第一个元素的位置,该位置是AP的倍数.给定素数P. 因此,如果输入像A = 3,D = 4,P = 5,则 ...

  3. python中用于返回元组中元素最小值的是_• 编写函数,查找序列元素的最大值和最小值。给定一个序列,返回一个元组,其中元组第一个元素为序列最大值,第二个元素为序列最小值 。_学小易找答案...

    [计算题]编写函数 demo(m,n) ,接收两个正整数作为参数,返回一个元组,其中第一个元素为最大公约数,第二个元素为最小公倍数. (4.0分) [计算题]递归算法计算组合数.实现函数 cni(n, ...

  4. class 第一个元素_第二章(第3节):网页元素定位和操作

    大家仔细思考一下,我们用 selenium 操控浏览器是什么意思,其实就是用 selenium 模拟人上网,也就是说人用浏览器能做的任何事情,我们用 selenium 都可以做,selenium 就如 ...

  5. css3怎么排除第一个,css怎么排除第一个子元素

    css排除第一个子元素的方法:1.通过使用伪类选择器":not"实现排除:2.通过使用"nth-of-type"或者"nth-child"实 ...

  6. perl 哈希数组的哈希_第一个元素使用哈希在数组中出现K次

    perl 哈希数组的哈希 Prerequisite: Hashing data structure 先决条件: 哈希数据结构 Problem statement: 问题陈述: Find the fir ...

  7. C语言指针实数组输入输出,C语言:回来两个数组中第一个元素的指针,并输出这个值...

    C语言:返回两个数组中第一个元素的指针,并输出这个值 // //  main.c //  Pointer_search // //  Created by ma c on 15/8/2. //  Co ...

  8. js查找数组中符合条件的元素

    js查找数组中符合条件元素的几种方法 一.利用for循环进行查找 let arr = [{name: 'zhangsan', age: 18},{name: 'lisi', age: 17},{nam ...

  9. 如何从 Java 的 List 中删除第一个元素

    概述 在这个实例中,我们将会演示如何删除在 Java 中定义的 List 的第 1 个元素. 我们将会针对这个问题使用 List 接口的 2 个实现 ArrayList 和 LinkedList 来进 ...

最新文章

  1. 机会是怎么变成陷阱的?
  2. 浏览器兼容编码与解码的问题
  3. JSP复习(二):EL表达式
  4. 学习笔记Hadoop(六)—— Hadoop集群的安装与部署(3)—— 配置ssh无密码登录
  5. catia的vh轴怎么显示_Origin入门教程(三):Origin中曲线怎么平移?
  6. goole机器学习视频链接【学习笔记】
  7. clion修改选中行的背景颜色
  8. oracle11g 隐藏参数_ORACLE 11GR2常用参数(含隐含参数)设置
  9. 用Delphi制作网络游戏外挂
  10. 原生Java高仿抖音短视频APP双端源码
  11. 果园机器人反思稿_《果园机器人》教学反思
  12. java 8 foreach获取索引
  13. mybatis java sql_mybatis java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax;
  14. TP-LINK WR841N V8刷OpenWRT
  15. 国际国家代号mysql_最全的各国 语言(文化)代码与国家地区对照表(国际通用标准形式)...
  16. matlab节约里程法_节约里程法matlab.doc
  17. 双闭环调速 matlab,双闭环直流调速系统仿真(Matlab).ppt
  18. 疫情期间华为面试总结
  19. 寻找不能拼读的汉语拼音
  20. 隐函数存在定理隐函数的高阶导数

热门文章

  1. STL运用的C++技术(6)——函数对象
  2. 关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法
  3. rename、remove
  4. 二维数组求平均值(指针的使用)
  5. python学法用法 自动刷分器_Python selenium模拟手动操作实现无人值守刷积分功能...
  6. JavaScript知识笔记(三)——内置对象、浏览器对象
  7. 模块之re模块 —— 正则
  8. Educational Codeforces Round 25 C. Multi-judge Solving
  9. 别人7天乐,运维还苦逼值班?
  10. C#深入浅出 关键字(一)