Java 8 Lambda的问题,可在增加计数时实现有效的最终处理

我想在以下情况下使用Java 8 Lambda表达式,但是我 在封闭范围中定义的本地变量fooCount必须是final或有效的final

。我理解的错误消息说什么,但我需要在这里计算比例,从而需要增加fooCountbarCount再计算百分比。那么实现它的方式是什么:

        // 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

回到顶部