Java 8 Raffinage Lambda Map <String, Liste <String >> à cordes avec la carte Exigence clé

TheDude537:

Les clés de la carte peuvent être des valeurs 1 - 5 où chaque clé est pas nécessaire, mais si quelque chose absent doit concaténer qui ressemble « - [] ».

Je l'ai utilisé Java 8 un peu avant et je me sens comme cela peut se faire plus efficacement avec flux () et Collect (), mais je me sens comme l'exigence de liste externe est de me jeter hors. Le code fonctionne ci-dessous, mais se sent incorrect.

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(" [] - ");
    }
});

Quelque chose qui ressemble Génère comme ça pour un emplacement Colorado:

US - CO - [] - CENTENNIAL -

En réponse à Nicholas K un exemple de carte serait

{1=[US], 2=[CO], 5=[METROPOLITAN FOOTBALL STADIUM DISTRICT, REGIONAL TRANSPORTATION DISTRICT]}

et on pourrait s'y attendre pour recevoir la sortie

US - CO - [] - [] - METROPOLITAN FOOTBALL STADIUM DISTRICT - REGIONAL TRANSPORTATION DISTRICT
Magnilex:

La bonne façon de traiter les valeurs manquantes dans une carte est ce computeIfAbsent()qui est une nouvelle méthode sur Mapdisponible depuis Java 8.

Cela vous donne le code ci-dessous:

String s = ids.stream()
    .map(id -> map.computeIfAbsent(id, absentKey -> singletonList("[]")))
    .flatMap(Collection::stream)
    .collect(Collectors.joining(" - "));
  • Tout d' abord, flux des clés de la carte, que vous avez stockées dans la idsvariable liste.
  • Ensuite, si la valeur est nulle, la carte à une valeur par défaut ( "[]"), sinon computeIfAbsent()renvoie la valeur réelle.
  • Puisque vous voulez imprimer toutes les valeurs séparées par " - ", nous allons juste planisphère le flux de listes et de les joindre par " - ".

s détient maintenant la valeur (si elle est utilisée avec votre carte par exemple):

"US - CO - [] - [] - METROPOLITAN FOOTBALL STADIUM DISTRICT - REGIONAL TRANSPORTATION DISTRICT"

Notez qu'il n'y a pas de fuite " - ". Collectors.joining()fait en sorte de ne pas ajouter le séparateur avant ou après les éléments.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=185543&siteId=1
conseillé
Classement