簡體   English   中英

使用謂詞的java中的CollectionUtils

[英]CollectionUtils in java using predicate

我有一個List<Object> ,我想返回它找到的第一個與謂詞匹配的值。

我發現我可以使用CollectionUtils.find(collection,predicate) (Apache commons)。 假設Object包含一個名為: value的整數變量,我如何在謂詞中指定該值可以是1,2,3,4,5並丟棄那些不匹配的值。 有可能做'包含'。

也沒有使用java 8所以無法做流。

要返回列表中與給定謂詞匹配的第一個元素:

MyObject res = CollectionUtils.find(myList, new Predicate<MyObject>() {
    @Override
    public boolean evaluate(MyObject o) {
        return o.getValue() >= 1 && o.getValue() <= 5;
    }
});

要過濾列表,使其僅包含與謂詞匹配的元素:

CollectionUtils.filter(myList, new Predicate<MyObject>() {
    @Override
    public boolean evaluate(MyObject o) {
        return o.getValue() >= 1 && o.getValue() <= 5;
    }
});

您可以注意到Predicate<MyObject>是相同的。

在Java 8中,您可以編寫

Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny();

在Java 7之前,最簡單的解決方案是使用循環。

Integer found = null;
for(integer i : list)
   if (i >= 1 && i <= 5) {
        found = i;
        break;
   }

這將是最簡潔,最快速的方式,因為Java 7不支持lambdas。

您可以使用Collections.removeIf (我假設您使用的是JDK 8)。 您還可以使用Stream:

list = list.stream().filter(predicate).collect(Collectors.toList());

使用Apach Commons Collections,您可以使用CollectionUtils.filter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM