[英]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.