Problema com o Java 8 Lambda para final efetivo ao incrementar contagens
Eu quero usar a expressão Java 8 Lambda no cenário a seguir, mas estou recebendoA variável local fooCount definida em um escopo anexo deve ser final ou efetivamente final. Entendo o que diz a mensagem de erro, mas preciso calcular a porcentagem aqui, por isso preciso aumentarfooCount
ebarCount
depois calcule a porcentagem. Então, qual é o caminho para alcançá-lo:
// 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;
}
Uma opção que tenho é usarAtomicLong
aqui em vez delong
mas gostaria de evitá-lo; portanto, mais tarde, se possível, quero usar o fluxo paralelo aqui.