[英]Extracting sub-strings with Stream in Java
我是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]
这是流的正确方法吗?
以下内容对您有用吗?
lines.stream().map(s -> s.split(",")[1])
.map(Integer::parseInt)
.map(f)
.collect(Collectors.toList());
其中f
是从Integer
到要在最终列表中使用的类型的函数。
它应该很简单。
lines.stream().map(s -> Integer.parseInt(s.split(",")[1]) * 2).collect(Collectors.toList());
更新基于更新后的问题
这是流的正确方法吗?
是。 您可以像上面显示的那样将这两个map
操作进一步组合为一个。
关于什么:
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.