[英]Guava Collections - filter by array of String values
我有一個事件對象列表。 每個對象都公開getId()
getter。 我需要過濾集合以僅獲取具有特定ID的項目,我可以這樣進行:
Lists.newArrayList(Iterables.filter(ret, x->x.getCategoryId().equals(category)));
結果,我得到了新的數組,過濾為項,其中getCategoryId()
等於我的特定category
。
到目前為止很好。 問題:如果我有一個String
值數組(所有類別用作過濾器),而不是單個特定類別,該怎么辦? 可能如下所示:
Lists.newArrayList(Iterables.filter(ret, x->x.getCategoryId().equals(categories.get(0)) || x.getCategoryId().equals(categories.get(1)) || ......../*To the end of the list*/));
由於我的categories
列表是動態的,因此我需要使用動態查詢來獲取所有||
應用的條件。 最好的方法是什么? 我可以以某種方式循環它還是提供數組作為filter
方法的標准?
注意:我使用的是Android,因此:
那么,你有什么主意嗎?
您所需要做的就是構建一個guava Predicate
,因為您需要快速查找,所以首先從該數組構建Set
可能會有所回報:
Set<String> set = new HashSet<>(Arrays.asList(values));
而不是簡單地替換謂詞:
x -> set.contains(x.getCategoryId())
僅使用Java 8,您將執行以下操作:
final Set<String> categories = new HashSet<>(Arrays.asList("category 1", "category 2"));
ret.stream()
.filter(x -> categories.contains(x.getCategoryId()))
.collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.