enn*_*nth 3 java regex lambda functional-programming java-stream
我有一些我正在循环的字符串输入,我试图转换为 java 8 流/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;
}
Run Code Online (Sandbox Code Playgroud)
我试图做类似的事情
list.stream()
.filter(i -> p.matcher(i).find())
.map(..............)
...
Run Code Online (Sandbox Code Playgroud)
...但无法得到总结逻辑。有人能指出我正确的方向吗?
您需要先应用matcherthen 过滤器find
return inputs.stream()
.map(p::matcher)
.filter(Matcher::find)
.map(m -> m.group(0))
.mapToInt(Integer::parseInt)
.sum();
Run Code Online (Sandbox Code Playgroud)
使用 lambda 函数可以更清楚地看到它,但这是一样的
return inputs.stream().map(input -> p.matcher(input))
.filter(matcher -> matcher.find())
.map(m -> m.group(0))
.mapToInt(s -> Integer.parseInt(s)).sum();
Run Code Online (Sandbox Code Playgroud)
这是一个棘手的问题,因为Matcher逻辑。我会这样写
list.stream()
.map(p::matcher)
.filter(Matcher::find)
.mapToInt(m -> Integer.parseInt(m.group(0))
.sum();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |