Java 8 Lambda的问题,可在增加计数时实现有效的最终处理
我想在以下情况下使用Java 8 Lambda表达式,但是我 在封闭范围中定义的本地变量fooCount必须是final或有效的final
。我理解的错误消息说什么,但我需要在这里计算比例,从而需要增加fooCount
和barCount
再计算百分比。那么实现它的方式是什么:
// key is a String with values like "FOO;SomethinElse" and value is Long final Map<String, Long> map = null;
....
private int calculateFooPercentage() {
long fooCount = 0L;
long barCount = 0L;
map.forEach((k, v) -> {
if (k.contains("FOO")) {
fooCount++;
} else {
barCount++;
}
});
final int fooPercentage = 0;
//Rest of the logic to calculate percentage
....
return fooPercentage;
}
我要选择的一种方法是在AtomicLong
这里使用,而不要使用,long
但我想避免使用它,因此,如果可能的话,以后我想在这里使用并行流。
回答:
count
流中有一种方法可以为您计数。
long fooCount = map.keySet().stream().filter(k -> k.contains("FOO")).count();long barCount = map.size() - fooCount;
如果要并行化,请更改.stream()
为.parallelStream()
。
另外,如果您尝试手动增加变量并使用流并行化,则可能需要使用类似的方法AtomicLong
来提高线程安全性。即使编译器允许,简单变量也不是线程安全的。
以上是 Java 8 Lambda的问题,可在增加计数时实现有效的最终处理 的全部内容, 来源链接: utcz.com/qa/415281.html