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 forEach
al procesar en un mapa?
2) Es decir, la parte de dentro de código forEach
debe ser envuelto dentro de método:
System.out.println("Key ="+K.getKey()+" Value = "+K.getValue());
System.out.println("Some more processing ....");
3) entiendo el forEach
método en este caso espera una Consumer
Interface` 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?
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 Consumer
que no necesita necesariamente una Consumer
. Lo que necesita es un método que respeta la entrada / salida de la Consumer
interfaz funcional, que es Entry<Integer,String>
de entrada / void
salida.
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.