将字符串流转换为Longs流

And*_*ose 5 java java-8 java-stream

我有一个List<String>我想转换成的List<Long>.在Java 8之前,我会通过循环执行此操作List<String>,将每个转换String为a Long并将其添加到new List<Long>,如下所示.

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

但是,我需要使用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());
Run Code Online (Sandbox Code Playgroud)

And*_*ose 10

解决方案非常简单.只是需要使用Long::valueOf.

List<Long> longs = strings.stream().map(Long::valueOf).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • *"解决方案非常简单"*所以你在不到一分钟的时间内找到了解决方案而你在写这个问题之前找不到它? (4认同)
  • 不,我认为那些不完全理解方法引用的人可能会发现这很有用。当然,通过包含“.map”和“Collectors.toXXX()”的工作原理,答案可能会更好。如果您有时间这样做,则可以使用“编辑”链接或“发布您的答案”按钮。这样做比批评我发布可能对某人有帮助的内容更好。 (3认同)
  • @Tom我将其发布为问答。堆栈溢出使您可以选择在发布时回答自己的问题。这样,遇到此问题的任何其他人都可以看到解决方案,而不必询问自己的问题。在发布问题之前,我已经解决了问题。我发布它是为了他人的利益。 (2认同)
  • 是的,这是非常明显的,但我想知道为什么你写了你的答案,就像你已经做了一些研究_之后你发布了答案,除了"只需要使用`Long :: valueOf`"之外没有任何解释.既然你有时间的话.以此为例:[在Java中解析日期时间字符串时需要\`Locale \`](http://stackoverflow.com/q/32162108).举个例子:这篇文章可以解释从"Collection <A>"到"Collection <B>"的转换是如何工作的,`.map`做什么以及`Collectors.toXXX()`如何确定目标集合类型. (2认同)
  • 你认为,将`Long.valueOf`转换为`Long :: valueOf`并不是每个知道[方法引用]的人(http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html)会发现,但值得拥有自己的问答?真? (2认同)