Foro sobre Java SE > Referirse a un MAP
No. Si recorres un Map mediante un Entry, en cada iteración debes asignar los valores respectivos de key y value del Entry.
Por otra parte, una vez que los obtienes no es necesario que uses la referencia del Map (refs) para usarlos.
También pueden usarse lambdas con los arrays:
http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#stream-int:A-
En tu caso, puedes usarlo para eliminar ese bucle, y usar un filter para descartar los valores 0
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class NewMain {
public static void main(String[] args) {
final Map<String, Registro> mapa = new HashMap<>();
mapa.put("uno", new Registro("1", "2"));
mapa.put("dos", new Registro("1", "2", "3"));
mapa.put("tres", new Registro("1", "", "3", "4"));
mapa.put("cuatro", new Registro("1", "2", "", "5"));
mapa.entrySet()
.stream()
.forEach((Map.Entry<String, Registro> entry) -> {
final String clave = entry.getKey();
Arrays
.stream(entry.getValue().referencias)
.filter((String referencia) -> !referencia.isEmpty())
.forEach((String referencia) -> System.out.println("clave: " + clave + " referencia:" + referencia)
);
});
}
private static class Registro {
private final String[] referencias;
Registro(String... referencias) {
this.referencias = referencias;
}
}
}
Al ejecutarlo, obtienes una salida como la siguiente:
clave: uno referencia:1
clave: uno referencia:2
clave: dos referencia:1
clave: dos referencia:2
clave: dos referencia:3
clave: tres referencia:1
clave: tres referencia:3
clave: tres referencia:4
clave: cuatro referencia:1
clave: cuatro referencia:2
clave: cuatro referencia:5
Hola!
Soy novata en java y tengo un pequeño problema
Tengos muchos objteos cadena de la clase de Registro donde guardo información de una base de datos. Los he almacenado en un Map:
refs.put(cadena.ref, cadena);
Luego he declarado lo siguiente:
refs.entrySet().stream().forEach((cadena) -> {
String clave=cadena.getKey();
Registro valor=cadena.getValue();
System.out.println(clave+ " " +valor.año+ " " +valor.publicación);})
Mi problema es al querer generar archivos de salida. Para que me funcione, tengo que ponerlo de la sigiente manera:
FileOutputStream fichero6 = new FileOutputStream("C://java//datosSalida//Articulo-referencias.txt");
PrintStream ps6 = new PrintStream(fichero6);
refs.entrySet().stream().forEach((cadena) -> {
String clave=cadena.getKey();
Registro valor=cadena.getValue();
for(int i=0;i<refs.valor.referencias.length;i++){
if (refs.valor.referencias[i].trim().length()==0) continue;
ps6.println(clave+","+valor.referencias[i]);}
Querría saber si puedo llamar a los objetos del map sin tener que voler a definir valor y clave.
Había pensado algo así,pero me da error:
for(int i=0;i<refs.valor.referencias.length;i++){
if (refs.valor.referencias[i].trim().length()==0) continue;
ps6.println(refs.clave+","+refs.valor.referencias[i]);}
Muchas gracias!!