我有一个字符串:
String ints = "1, 2, 3";
我想将它转换成整数列表:
List<Integer> intList
我可以通过以下方法将其转换为字符串列表:
List<String> list = Stream.of("1, 2, 3").collect(Collectors.toList());
但不是整数列表。
有什么想法吗?
我有一个字符串:
String ints = "1, 2, 3";
我想将它转换成整数列表:
List<Integer> intList
我可以通过以下方法将其转换为字符串列表:
List<String> list = Stream.of("1, 2, 3").collect(Collectors.toList());
但不是整数列表。
有什么想法吗?
你需要将字符串分割并将每个部分转换为Stream。 方法splitAsStream(input)
正是做这件事的:
Pattern pattern = Pattern.compile(", ");
List<Integer> list = pattern.splitAsStream(ints)
.map(Integer::valueOf)
.collect(Collectors.toList());
它返回一个Stream<String>
,包含输入字符串的一部分,您之后可以将其映射为Integer
并收集到列表中。
请注意,您可能希望将模式存储在常量中,并在每次需要时重用它。
Pattern.splitAsStream()
方法。太好了! - Lukas EderPattern.compile(", ", Pattern.LITERAL);
来提示引擎没有实际的模式匹配。当然,引擎会自己发现,没有这个标志也一样,但指定标志可以跳过分析模式的过程。 - Holger正则表达式拆分是您要寻找的内容
Stream.of(ints.split(", "))
.map(Integer::parseInt)
.collect(Collectors.toList());
Arrays.stream
。也就是说,在没有真正的可变参数调用时应该使用它,这样可以清楚地表明我们正在流式处理一个数组,并且对于基本类型的数组将能够正确工作,而不是创建一个单一元素流。对于这种特定情况,两者都会产生相同的结果。 - HolgerArrays.asList
作为varargs方法被认为是一个设计错误,因为它与创建一个现有数组的包装器的目的相矛盾(例如,通过返回的List
可以修改数组)。Java 9将修复这个问题。在那里,您可以使用List.of(…)
创建任意大小的不可变列表(真正的varargs语义),并使用Arrays.asList(array)
将数组包装在可变的List
中(由于兼容性约束仍然是varargs)。 - Holger首先,将字符串拆分为单独的数字,然后将这些数字(仍然是字符串)转换为实际的整数,并最终将它们收集到一个列表中。您可以通过链接流操作来完成所有这些操作。
String ints = "1, 2, 3";
List<Integer> intList = Stream
.of(ints.split(", "))
.map(Integer::valueOf)
.collect(Collectors.toList());
System.out.println(intList); // [1, 2, 3]
List<Integer> erg = Arrays.asList(ints.replace(" ", "").split(",")).stream().map(Integer::parseInt).collect(Collectors.toList());
编辑: 抱歉,我没有看到它是一个单独的字符串,以为它是一个String数组。
"1, 2, 3"
的字符串。你的意思是使用Stream.of("1", "2", "3")
吗? - Jesper