我是Java中的Streams和Lambdas的新手。我有一个像这样的变量 -
List<String> lines = Arrays.asList("ab,12,bd","df,23,df","ef,98,dg");
我希望这些行动能够实现。
然后将结果收集为列表,即包含24,46,196的列表。
我尝试在溪流中做到这一点,但我无法得到。任何指针都会有所帮助。谢谢。
编辑:我试过这种方式并得到了结果 -
List<Integer> result1 = lines.stream()
.map(l -> l.split(",")[1])
.map(l->Integer.parseInt(l))
.collect(Collectors.toList());
得到结果
[12, 23, 98]
这是做流的正确方法吗?
答案 0 :(得分:1)
以下是否适用于您?
lines.stream().map(s -> s.split(",")[1])
.map(Integer::parseInt)
.map(f)
.collect(Collectors.toList());
其中f
是您从Integer
到您要在最终列表中使用的类型的函数。
答案 1 :(得分:1)
应该是直截了当的。
lines.stream().map(s -> Integer.parseInt(s.split(",")[1]) * 2).collect(Collectors.toList());
根据更新的问题更新
这是做流的正确方法吗?
是。您可以进一步将两个map
操作合并为一个,如上所示。
答案 2 :(得分:1)
怎么样:
List<Integer> result = lines.stream()
.map(line -> line.replaceFirst(".*,(\\d+),.*", "$1"))
.map(num -> 2 * Integer.parseInt(num))
.collect(Collectors.toList());
在这种情况下,您可以转换为int[]
:
int[] result = lines.stream()
.map(line -> line.replaceFirst(".*,(\\d+),.*", "$1"))
.mapToInt(num -> 2 * Integer.parseInt(num))
.toArray();