gpt4 book ai didi

java - Guava:Iterables.filter VS Collections2.filter,有什么大的区别吗?

转载 作者:太空狗 更新时间:2023-10-29 22:39:41 25 4
gpt4 key购买 nike

我想知道在 Guava 中 Iterables.filter(Iterable, Predicate) 之间是否有任何差异和 Collections2.filter(Collection, Predicate)方法?

它们似乎既维护迭代顺序,又提供实时 View 。Javadoc 说调用 Collections2.filter().size() 将遍历所有元素。

假设我有一个谓词来过滤项目列表,因此我想要 View (或列表,无关紧要)中剩余的项目数。我应该用什么?使用 Collections2.filter 似乎更简单,因为 Collection 提供了 size() 方法。

但是在后台,有没有区别:

ImmutableList.copyOf(
Iterables.filter(lead.getActions(), isRealActionDoneByUserPredicate)
).size();

和:

Collections2.filter(lead.getActions(),isRealActionDoneByUserPredicate).size();

顺便问一下,构建一个 ImmutableList 是否比构建一个普通的 ArrayList 更快?

最佳答案

这里是 Guava 贡献者。

Collections2.filter(elements, predicate).size()

更可取,因为它不复制 -- filter方法返回一个 View ——但是

Iterables.size(Iterables.filter(elements, predicate))

本质上是等价的,同样会在没有任何复制的情况下找到答案。

至于构建ArrayList的相对速度与 ImmutableList 相比,它因您使用的构造方法而异:

  • ImmutableList.copyOf(collection)应该花费几乎完全相同的时间。 (它必须检查空值,但这很便宜。)
  • ImmutableList.builder()....build()需要更长的常数因子,因为它必须使用 ArrayListBuilder里面,因为我们事先不知道将添加多少元素。
  • ImmutableList.of(...)将具有大致相同的速度。

也就是说,使用 ImmutableList概念好处通常会超过小的性能成本,尤其是当您要频繁传递列表时。

关于java - Guava:Iterables.filter VS Collections2.filter,有什么大的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834577/

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