我可以使用 Java 8 的 stream() 将一组非原始项转换为列表吗? [复制]

Posted

技术标签:

【中文标题】我可以使用 Java 8 的 stream() 将一组非原始项转换为列表吗? [复制]【英文标题】:Can i convert an array of non-primitive items to a List using Java 8's stream()? [duplicate] 【发布时间】:2020-12-08 05:21:05 【问题描述】:

我在这里看到的大多数示例都解释了如何将基元数组转换为 ArrayList。

是否可以使用 stream() 将非基元数组转换为 ArrayList?

如果没有,是否有一个实用程序可以做同样的事情?

【问题讨论】:

有可能,只需搜索您的特定类型,您也会在 *** 上找到相关的重复项。 这能回答你的问题吗? Converting array to list in Java 一般 SO 问题:这确实是“将数组转换为 Java 中的列表”的副本。但是,该答案的获胜答案有 1400 票,而且现在是 2020 年,因此误导它几乎是错误的(Arrays.asList 有缺点,例如半不可变和半可变,给您提供了两者中最差的属性,现在有更干净的 List.of)。那么如何解决这个问题呢?找到 1400 人投反对票?似乎对回答者不公平,因为在他们写它的时候,那是体面的。 @rzwitserloot 这些缺点不会使答案无效。如果您想要一个无复制的解决方案,Arrays.asList(…) 仍然是解决方案,其局限性是不可避免的。当然,如果该答案记录了这些问题,那就太好了。但请注意,这个答案实际上是在回答一个不同的问题,即关于将 int[] 转换为 List 的前提是错误的前提是使用 Arrays.asList 在 Java 5 之前有效。 @rzwitserloot 这正是我所说的。该链接问题的前提是错误…… 【参考方案1】:

答案当然是:

String[] array = ...;
List<String> list = List.of(array);

你提到'使用流()' - 嗯,为什么?流是一种工具。对于这份工作,这有点像在问:“嘿,我可以用鞋钉钉子……吗?”。我想,也许吧?如果您要跑步,鞋子很棒,但在尝试固定钉子时不合适。用锤子。

但如果你想……当然……Arrays.stream(array).collect(Collectors.toList());,但这是更多的打字,更慢,更少的惯用语,基本上在所有方面都更糟。

【讨论】:

A shoe…or a glass bottle

以上是关于我可以使用 Java 8 的 stream() 将一组非原始项转换为列表吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 Stream 函数将字谜列表分组为列表映射

java8-Stream流的创建

如何将 org.w3c.dom.NodeList 与 Java 8 Stream API 一起使用?

Java 8 Stream API实例

学习Java 8 Stream Api - Stream 周边及其他

我可以在Java 8中复制Stream吗?