将逗号分隔的字符串转换为没有中间容器的列表

use*_*896 17 java

我需要将逗号分隔的字符串转换为整数列表.例如,如果我有以下字符串

String numbersArray = "1, 2, 3, 5, 7, 9,";
Run Code Online (Sandbox Code Playgroud)

有没有办法如何立即将其转换为List<Integer>

现在我只看到一种方法.

List<String> numbers = Arrays.asList(numbersArray.split(","));
Run Code Online (Sandbox Code Playgroud)

然后

List<Integer> numbersInt = new ArrayList<>();
for (String number : numbers) {
    numbersInt.add(Integer.valueOf(nubmer));
}
Run Code Online (Sandbox Code Playgroud)

我很好奇有没有办法如何错过分享,List<String>并在第一次开始转换它List<Integer>

Mar*_*oun 32

如果您使用的是Java 8,则可以:

int[] numbers = Arrays.asList(numbersArray.split(","))
                      .stream()
                      .map(String::trim)
                      .mapToInt(Integer::parseInt).toArray();
Run Code Online (Sandbox Code Playgroud)

如果没有,我认为您的方法是最好的选择.

  • 如果你要处理的项目"没有中间容器",你必须使用`Pattern.compile("").splitAsStream(numbersArray)...`否则,其实数组**是一种容器的... (3认同)

Moh*_*shi 16

使用java 8 Streams:

List<Integer> longIds = Stream.of(commaSeperatedString.split(","))
                .map(Integer::parseInt)
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • OP确实询问整数,而不是long。另外,如果您添加了更多有关如何解决问题的方法以及为什么解决问题的信息,您的答案更有可能被接受(并且还应该指定仅在Java 8中有效) (2认同)

was*_*ren 5

我真的很喜欢@MarounMaroun的答案,但我想知道使用Arrays.stream- 方法而不是是否更好Arrays.asList

int[] numbers = Arrays.stream(numbersArray.split(","))
                .map(String::trim).mapToInt(Integer::parseInt).toArray();
Run Code Online (Sandbox Code Playgroud)

这个 SO 问题进一步讨论了这一点并将其总结如下:

因为你把数组到流的转换留给了 JDK——让它负责效率等。