Java中用流提取子字符串

Java中用流提取子字符串,java,java-8,java-stream,Java,Java 8,Java Stream,我不熟悉Java中的Streams和Lambdas。我有一个这样的变量- List<String> lines = Arrays.asList("ab,12,bd","df,23,df","ef,98,dg"); 这是流式处理的正确方法吗?以下内容对您有用吗 lines.stream().map(s -> s.split(",")[1]) .map(Integer::parseInt) .map

我不熟悉Java中的Streams和Lambdas。我有一个这样的变量-

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

这是流式处理的正确方法吗?

以下内容对您有用吗

lines.stream().map(s -> s.split(",")[1])
     .map(Integer::parseInt)
     .map(f)
     .collect(Collectors.toList());

其中f是从整数到要在最终列表中使用的类型的函数。

它应该很简单

lines.stream().map(s -> Integer.parseInt(s.split(",")[1]) * 2).collect(Collectors.toList());
根据更新的问题进行更新

这是做流的正确方法吗

对。您可以进一步将这两个映射操作组合为一个,如上面所示。

关于:

List<Integer> result = lines.stream()
    .map(line -> line.replaceFirst(".*,(\\d+),.*", "$1"))
    .map(num -> 2 * Integer.parseInt(num))
    .collect(Collectors.toList());

请显示您当前的尝试,以更好地说明您的描述。尝试了什么?分享它,这有助于理解您无法解决的问题。添加了我的代码。这对于您的输入是绝对正确的,是的。用方法引用替换l->Integer.parseIntl的小提示:Integer::parseIntUsing split方法在这里的性能不如只使用正则表达式,因为当我们只需要一个元素时,它会创建一个包含所有元素的额外数组。在这里使用split方法的性能不如只使用正则表达式,因为它会创建一个包含所有元素的额外数组当我们只需要一个元素时,@Tet:您可以指定拆分的限制,以避免不必要的工作。在这种情况下,它可能比正则表达式更有效,因为String.split具有单字符模式的快速路径。但如果性能真的很重要,那么使用indexOf和substring编写专用方法可能会更快。
lines.stream().map(s -> Integer.parseInt(s.split(",")[1]) * 2).collect(Collectors.toList());
List<Integer> result = lines.stream()
    .map(line -> line.replaceFirst(".*,(\\d+),.*", "$1"))
    .map(num -> 2 * Integer.parseInt(num))
    .collect(Collectors.toList());
int[] result = lines.stream()
    .map(line -> line.replaceFirst(".*,(\\d+),.*", "$1"))
    .mapToInt(num -> 2 * Integer.parseInt(num))
    .toArray();