Problema con Java 8 Lambda para una final efectiva mientras se incrementan los conteos

Quiero usar la expresión Java 8 Lambda en el siguiente escenario, pero estoy obteniendoLa variable local fooCount definida en un ámbito de cobertura debe ser final o efectivamente final. Entiendo lo que dice el mensaje de error, pero necesito calcular el porcentaje aquí, así que necesito incrementarfooCount ybarCount luego calcule el porcentaje. Entonces, ¿cuál es la forma de lograrlo?

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

Una opción que tengo es usarAtomicLong aquí en lugar delong pero me gustaría evitarlo, así que más adelante, si es posible, quiero usar el flujo paralelo aquí.

Respuestas a la pregunta(3)

Su respuesta a la pregunta