gpt4 book ai didi

java - Guava Collections - 按字符串值数组过滤

转载 作者:行者123 更新时间:2023-12-02 01:56:45 29 4
gpt4 key购买 nike

我有一个事件对象列表。每个对象都公开 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com