Google Collections(Guava Libraries):ImmutableSet / List / Map and Filtering

时间:2011-05-30 13:29:51

标签: java performance immutability guava

假设您要构建ImmutableSet / List / Map对象的副本,但过滤掉一些原始条目。实现这一目标的一种方法如下:

ImmutableList.copyOf(Iterables.filter(myObject, myObject.EQUALS));

其中myObject.EQUALSIterables.filter()操作的谓词。我认为这是一个非常优雅且易于阅读的实现。但是,一个构建两个列表对象(第一个通过Iterables.filter(...)调用,第二个通过ImmutableList.copyOf(...))这是非常低效的。

有人知道更有效的方法吗?

我想最好的办法是将过滤谓词添加到ImmutableSet / List / Map构建器中,这样对象必须只构造一次。但不幸的是,没有这样的参数。

2 个答案:

答案 0 :(得分:16)

Iterables.filter()的结果只是myObject中数据的视图:新列表仅由ImmutableList.copyOf()使用Iterable <提供的过滤迭代器构建/ p>

答案 1 :(得分:0)

看看番石榴的Iterators

具体过滤(Iterator未过滤,谓词谓词)