Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Referirse a un MAP

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!!

enero 6, 2015 | Unregistered Commenterpetra

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

enero 7, 2015 | Registered Commenterchoces