我有一个事件对象列表。每个对象都公开 getId() getter。我需要过滤集合以仅获取具有特定 id 的项目,我可以这样做:
Lists.newArrayList(Iterables.filter(ret, x->x.getCategoryId().equals(category)));
结果,我得到了新的数组,过滤为项目,其中 getCategoryId()
等于我的特定类别
。
到目前为止还好。问题:如果我有 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
列表是动态的,我需要使用动态查询来获取应用的所有||
条件。做到这一点的最佳方法是什么?我可以以某种方式循环它或提供 array 作为 filter
方法的标准吗?
注意:我使用的是 Android,所以:
- 可以使用 Java 8 lambda(如上所示)来简化语法。
- 无法使用 Java 8 流(因为 min api 是 Android Lollipop)。这就是为什么使用 Guava 来执行过滤的原因。请不要提出任何基于 Java 8 流的灵魂。
那么,你有什么想法吗?
最佳答案
您所要做的就是构建一个 guava Predicate
,因为您需要快速查找,因此首先从该数组构建一个 Set
可能会有所返回:
Set<String> set = new HashSet<>(Arrays.asList(values));
而不是简单地替换谓词:
x -> set.contains(x.getCategoryId())
关于java - Guava Collections - 按字符串值数组过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52185355/