将字符串流转换为长整型流

8

我有一个 List<String>,我想将其转换为 List<Long>。 在 Java 8 之前,我会通过循环遍历 List<String>,将每个 String 转换为 Long 并将其添加到新的 List<Long> 中,如下所示。

List<String> strings = /* get list of strings */;
List<Long> longs = new ArrayList<>();
for (final String string : strings) {
    longs.add(Long.valueOf(string));
}

然而,我需要使用Java 8流来完成这个转换,因为这个转换是更大的流操作的一部分。我已经把 List<String> 转换成流,就像我执行了 strings.stream()。那么,我该如何执行这个转换,类似于下面的代码。

List<String> strings = /* get list of strings */;
List<Long> longs = strings.stream().map(/*convert to long*/).collect(Collectors.toList());
1个回答

16

解决方法非常简单,只需要使用Long::valueOf即可。

List<Long> longs = strings.stream().map(Long::valueOf).collect(Collectors.toList());

或者Long::parseLong

List<Long> longs = strings.stream().map(Long::parseLong).collect(Collectors.toList());

4
你在不到一分钟的时间内找到了解决方案,而之前你写问题时却找不到?"Solution was very simple"意思是“解决方案非常简单”。 - Tom
3
@Tom 我将其发布为问答形式。 Stack Overflow 在您发布问题时提供自我回答的选项。这样,任何遇到此问题的其他人都可以看到解决方案,而不必提出自己的问题。在发布问题之前,我已经解决了这个问题。我发布它是为了让其他人受益。 - Andrew Mairose
2
是的,这很明显,但我想知道为什么你写出了这样的答案,就好像你在发布答案之后进行了一些研究,并且没有任何解释,除了“只需要使用Long::valueOf”。既然你有时间做这件事,就拿这个作为例子:Java中何时需要使用“Locale”来解析日期时间字符串?。例如:这篇文章可以解释一般情况下从“Collection<A>”到“Collection<B>”的转换方式,.map的作用以及Collectors.toXXX()如何确定目标集合类型。 - Tom
2
你认为将 Long.valueOf 转换为 Long::valueOf 不是每个了解方法引用的人都能发现,但它值得有自己的问答吗?真的吗? - Holger
3
不,我认为那些不完全理解方法引用的人可能会发现这很有用。当然,如果包括如何使用.mapCollectors.toXXX()的工作原理,答案可能会更好。如果你有时间做到这一点,那就可以通过'编辑'链接或'发布你的答案'按钮来实现。这样做比批评我发布可能有助于某人的内容更值得花费时间。 - Andrew Mairose
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接