繁体   English   中英

在Java中使用Stream提取子字符串

[英]Extracting sub-strings with Stream in Java

我是Java中Streams和Lambdas的新手。 我有一个这样的变量-

 List<String> lines = Arrays.asList("ab,12,bd","df,23,df","ef,98,dg");

我希望这些动作能够发生。

  1. 拆分列表中的每个元素。
  2. 在结果数组中提取第二个元素。 (即数字)。
  3. 在其上应用一些功能。 为了简单起见,让我们将其乘以2。
  4. 然后将结果收集为列表,即包含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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM