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

use*_*330 6 java guava java-8 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) );

一些性能或效率的参数,

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

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

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

Lou*_*man 2

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

(但是 Guava 正在努力添加对 Java 8 之类的支持,您可能只是等待。)