当前位置: 首页 > 知识库问答 >
问题:

将Java-8流收集到Guava ImmutableList的最佳方式

荆鸿畅
2023-03-14

我想将流放入不可变列表中。从性能的角度来看,以下方法与哪种方法更好有什么区别?

>

  • <code>collect(Collectors.collectingAndThen(collector.toList(),ImmutableList::copyOf))

    不可变列表( 流迭代器() );

    collect( 收集器的( 不可变列表.Builder

    性能或效率的更多参数,

    >

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

    如果我想要对集合进行排序,使用带有自定义比较器的中间操作". sorted()"怎么办。


  • 共有2个答案

    叶淇
    2023-03-14
    匿名用户

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

    (但是Guava正在致力于增加对Java 8的支持,你可以等一等。)

    翟英达
    2023-03-14

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

    对于编程性能,请使用最清晰的方式。仅从外观上看,我最喜欢第二个,我看不出有明显的低效。

     类似资料:
    • 为了更好地理解新的流API,我试图转换一些旧代码,但我被困在这一个。 我似乎无法为它创建有效的收集器:

    • 我想做以下事情: 但在某种程度上,结果列表是Guava的<code>ImmutableList<code>的实现。 我知道我可以做到 但我想直接收集它。我试过了 但它抛出了一个异常: java.lang.UnsupportedOperationException at com.google.common.collect.ImmutableCollection.add(ImmutableCollec

    • 我有一个列表的地图,并希望收集所有的值,然后流在收集的列表上,所以给出:- 下面的工作/显示了我想用迭代做什么,但我想在流中做这些,而不是使用迭代创建一个中间列表:- 因此,我希望将列表的映射流化到一个列表中,然后在一个流中处理该子列表,而不是必须在两个语句中完成上述操作(即通过迭代构建列表,然后进行流化以筛选/排序和收集)。 到目前为止,我还没有做到这一点,当我尝试流式/收集地图时,我会遇到编译

    • 什么时候使用和?有没有人有好的、具体的例子来说明什么时候走一条路或者走另一条路更好呢? Javadoc提到collect()是一个可变约简。 以上的说法是猜测,然而,我希望一个专家在这里插话。

    • 我使用的是java 11,我有一个名为MyObject的对象列表,看起来像这样 我想使用流将这些对象收集到地图中 我试着用收集器来做。toMap(),但似乎不可能做到这一点 我的问题是可以制作一张地图吗

    • 问题内容: 我想接受输入并对其应用并行流,然后我希望将输出作为列表。输入可以是任何列表或可以对其应用流的任何集合。 我在这里担心的是,如果我们要输出为map,我们可以从java中选择一个选项,例如 但是我看不到以线程安全的方式从并行流收集以提供列表作为输出的选项。我看到那里还有一个选择 通过这种方式,我们可以在collect方法中提供各种并发实现。但是我认为java.util.concurrent