Expresión extraer Multilínea Lambda durante el uso de ParaCada mientras que la iteración de un mapa en Java 8

Atul:

Estoy iteración a un mapa, como a continuación usando Java 8 conforEach

Map<Integer,String> testMap = new HashMap<>();
testMap.put(1, "Atul");
testMap.put(2, "Sudeep");
testMap.put(3, "Mayur");
testMap.put(4, "Suso");

testMap.entrySet().forEach( (K)-> {         
                System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());
                System.out.println("Some more processing ....");            
            }

    );

Mi pregunta es :

1) ¿Cómo podemos extraer un método de forEachal procesar en un mapa?

2) Es decir, la parte de dentro de código forEachdebe ser envuelto dentro de método:

        System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());
        System.out.println("Some more processing ....");    

3) entiendo el forEachmétodo en este caso espera una ConsumerInterface` funcional que tiene debajo de su firma -

void accept(T t); 

4) Así que lo que quiero es algo como esto:

   //declare a consumer object 
   Consumer<Map.Entry<Integer,String>> processMap = null;

  // and pass it to ForEach 
  testMap.entrySet().forEach(processMap);

5) ¿Se puede lograr esto?

davidxxx:

Entiendo el método forEach en este caso espera una Consumidor funcional Interface` que tiene debajo de su firma

forEach()espera de hecho una Consumer, pero para procesar una Consumerque no necesita necesariamente una Consumer. Lo que necesita es un método que respeta la entrada / salida de la Consumerinterfaz funcional, que es Entry<Integer,String>de entrada / voidsalida.

Por lo que sólo podría invocar un método que tiene como parámetro el Entry:

testMap.entrySet().forEach(k-> useEntry(k)));

o

testMap.entrySet().forEach(this::useEntry));

con useEntry (), tales como:

private void useEntry(Map.Entry<Integer,String> e)){        
    System.out.println("Key ="+e.getKey()+" Value = "+e.getValue());
    System.out.println("Some more processing ....");                        
}

La declaración de una Consumer<Map.Entry<Integer,String>>que se pasa a forEach()tales como:

Consumer<Map.Entry<Integer,String>> consumer = this::useEntry;
//...used then :
testMap.entrySet().forEach(consumer);

sólo tiene sentido si el consumidor en su forEach()está diseñado para ser variabilized en una cierta manera (calculado / aprobada por el cliente o de todos modos).
Si no es en este caso y que utilice un consumidor, que finalmente hizo las cosas más abstracto y complicado de lo que se requiere de manera efectiva.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227813&siteId=1
Recomendado
Clasificación