Java 8 Refinación Lambda Map <String, lista <String >> para Requisito cadena con clave de mapa

TheDude537:

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
Magnilex:

La forma correcta de manejar los valores que faltan en un mapa es computeIfAbsent()que es un nuevo método de Mapdisposició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 idsvariable de lista.
  • Entonces, si el valor es nulo, mapa a un valor predeterminado ( "[]"), de lo contrario computeIfAbsent()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.

Supongo que te gusta

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