赣州做网站j,公司网站建设优帮云,公司网站宣传自己做的灯展,生产erp管理系统app问题#xff1a;查找满足断言的第一个元素
我刚刚开始使用Java 8的lambdas#xff0c;我尝试去实现一些我在函数式语言里面经常用的
例如#xff0c;大部分的函数式语言里有一些查找函数#xff0c;针对序列或者list进行操作#xff0c;返回使得断言为真的第一个元素。我…问题查找满足断言的第一个元素
我刚刚开始使用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。为了说服你你可以做一下下面的测试
ListInteger 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 Overflowhttps://stackoverflow.com/questions/23696317/find-first-element-by-predicate