Las claves del mapa pueden ser valores 1 - 5, donde cada tecla no es necesario, pero si necesidad concatenar ausente algo que parece "- []".
He usado Java 8 un poco antes y siento que esto se puede hacer de manera más eficiente con la corriente () y recoger () pero me siento como el requisito de lista externa me está arrojando. El siguiente código funciona, pero se siente incorrecto.
List<String> ids = Arrays.asList("1", "2", "3", "4", "5");
StringBuilder location = new StringBuilder();
ids.forEach(id -> {
List<String> addresses = map.get(id);
if (addresses != null) {
addresses.forEach(addr -> location.append(addr + " - "));
} else {
location.append(" [] - ");
}
});
Genera algo que se parece a esto para una ubicación de Colorado:
US - CO - [] - CENTENNIAL -
En respuesta a Nicholas K un ejemplo de mapa sería
{1=[US], 2=[CO], 5=[METROPOLITAN FOOTBALL STADIUM DISTRICT, REGIONAL TRANSPORTATION DISTRICT]}
y sería de esperar para recibir la salida
US - CO - [] - [] - METROPOLITAN FOOTBALL STADIUM DISTRICT - REGIONAL TRANSPORTATION DISTRICT
La forma correcta de manejar los valores que faltan en un mapa es computeIfAbsent()
que es un nuevo método de Map
disposición desde Java 8.
Esto le da el código de abajo:
String s = ids.stream()
.map(id -> map.computeIfAbsent(id, absentKey -> singletonList("[]")))
.flatMap(Collection::stream)
.collect(Collectors.joining(" - "));
- En primer lugar, vamos a la corriente de las llaves en el mapa, que se han almacenado en la
ids
variable de lista. - Entonces, si el valor es nulo, mapa a un valor predeterminado (
"[]"
), de lo contrariocomputeIfAbsent()
devuelve el valor real. - Dado que desea imprimir todos los valores separados por
" - "
, vamos a plana correlacionar el flujo de las listas y se unen a ellos por" - "
.
s
ahora tiene el valor (si se utiliza con su mapa de ejemplo):
"US - CO - [] - [] - METROPOLITAN FOOTBALL STADIUM DISTRICT - REGIONAL TRANSPORTATION DISTRICT"
Tenga en cuenta que no hay arrastre " - "
. Collectors.joining()
se asegura de no anexa el delimitador antes o después de los elementos.