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

dan*_*bim 6 java performance immutability guava

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

ImmutableList.copyOf(Iterables.filter(myObject, myObject.EQUALS));
Run Code Online (Sandbox Code Playgroud)

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

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

我想最好的事情是将过滤器谓词添加到ImmutableSet/ List/ Map构建器,以便该对象必须只构造一次.但不幸的是,没有这样的参数.

Ald*_*ldo 16

结果Iterables.filter()只是对数据的一个视图myObject:新列表只是通过ImmutableList.copyOf()使用提供的过滤迭代器构建的Iterable

  • +1:这个鲜为人知并经常被忽视:`filter()`不**创建副本(具有所有相关的优点和缺点),它只是一个视图. (6认同)

Ada*_*ent 0

看看Guava的迭代器

具体过滤(迭代器未过滤,谓词谓词)