Java 8将for循环和值求和转换为流/ lambda?

恩斯

我正在遍历一些String输入,试图将其转换为java 8 stream / lambdas,但遇到了一些问题。我的样板代码如下所示:

public static int count(List<String> list) {
    String regex = "someRegexPatternHere"
    Pattern p = Pattern.compile(regex);
    int sum = 0;

    for (String val: list) {
        Matcher m = p.matcher(val);
        if (m.find()) {
            // summing logic here 
        }
    }
    return sum;
}

我正在尝试做类似的事情

list.stream()
    .filter(i -> p.matcher(i).find())
    .map(..............)
    ...

...但是无法总结汇总逻辑。谁能指出我正确的方向?

阿兹罗

您需要先matcherfind

return inputs.stream()
             .map(p::matcher)
             .filter(Matcher::find)
             .map(m -> m.group(0))
             .mapToInt(Integer::parseInt)
             .sum();

使用lambda函数可以更清楚地看到它,但这是相同的

    return inputs.stream().map(input -> p.matcher(input))
                 .filter(matcher -> matcher.find())
                 .map(m -> m.group(0))
                 .mapToInt(s -> Integer.parseInt(s)).sum();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章