番石榴集合 - 按字符串值数组过滤

问题描述 投票:0回答:2

我有一个Event对象列表。每个对象暴露qazxsw poi getter。我需要过滤集合以仅获取具有特定id的项目,我可以这样做:

getId()

结果,我得到新的数组,过滤到项目,其中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标准。这样做的最佳方法是什么?我可以以某种方式循环它或提供数组作为我的标准||方法?

注意:我在Android上,所以:

  • 可以使用Java 8 lambdas(如上所示)来简化语法。
  • 无法使用Java 8流(因为min api是Android Lollipop)。这就是Guava用于执行过滤的原因。请不要基于Java 8流提出任何灵魂。

所以,你有什么想法吗?

java android arraylist filtering guava
2个回答
2
投票

所有你需要做的是建立一个番石榴filter,因为你需要快速查找,它可能会从这个数组首先建立一个Predicate得到回报:

Set

而不是简单地取代谓词:

Set<String> set = new HashSet<>(Arrays.asList(values));   

0
投票

仅使用Java 8,您可以执行以下操作:

x -> set.contains(x.getCategoryId())
© www.soinside.com 2019 - 2024. All rights reserved.