收集Java-8 Stream到Guava ImmutableList的最佳方法

时间:2014-11-11 20:02:34

标签: java java-8 guava java-stream

我希望将流转换为不可变列表。以下方法之间有什么区别?从绩效角度来看哪个更好?

  1. collect( Collectors.collectingAndThen(Collectors.toList(), ImmutableList::copyOf));

  2. ImmutableList.copyOf( stream.iterator() );

  3. collect( Collector.of( ImmutableList.Builder<Path>::new, ImmutableList.Builder<Path>::add, (l, r) -> l.addAll(r.build()), ImmutableList.Builder<Path>::build) );

  4. 有关性能或效率的更多参数,

    1. 列表/集合中可能有许多条目。

    2. 如果我希望使用自定义比较器的中间操作".sorted()"对集进行排序,该怎么办。

    3. 因此,如果我向流
    4. 添加.parallel()该怎么办?

2 个答案:

答案 0 :(得分:3)

对于系统性能,您需要进行测量。

对于编程性能,请使用最清晰的方法。仅从外观来看,我最喜欢第二个,我认为那里没有明显的低效率。

答案 1 :(得分:2)

我希望1)是最有效的:通过额外的构建器看起来似乎不太可读并且不可能胜过正常toList(),并且从迭代器复制会丢弃大小调整信息。

(但是Guava正致力于为这样的Java 8添加支持,您可能只是等待它。)