查找满足断言的第一个元素
生活随笔
收集整理的這篇文章主要介紹了
查找满足断言的第一个元素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:查找滿足斷言的第一個元素
我剛剛開始使用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().anyMatch(x -> x > 5)文章翻譯自Stack Overflow:https://stackoverflow.com/questions/23696317/find-first-element-by-predicate
總結
以上是生活随笔為你收集整理的查找满足断言的第一个元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到狗咬手指流血了好不好
- 下一篇: 怎么样得到平台相关的换行符?