Liste Collect <Object> pour carte <String, List <Object >> en Java 8 flux en utilisant

akapti:

Je suis en train de faire cette itération en utilisant flux java 8 au lieu de traditionnel boucle.

J'ai une liste d'objets List<Obligation>et Obligationest d' avoir Listde l' Stringintérieur.

Obligation contient des champs tels que

f1et f2de type String,

et

f3 de type List<String>

Ce que je veux atteindre est Map<String, List<Obligation>>telle que, Stringutilisé dans la clé de Mapest chaque valeur présente dans l'un List<String>de l' Obligationintérieur deList<Obligation>

Voici comment le code regarderait en boucle traditionnelle pour:

// newly initialized Map
Map<String, List<Obligation>> map = new LinkedHashMap<String, List<Obligation>>();

// assume the list is populated
List<Obligation> obligations = someMethod();

                for(Obligation obligation : obligations) {
                    for(String license : obligation.getLicenseIDs()) {
                        if(map.containsKey(license)) {
                            map.get(license).add(obligation);
                        } else {
                            List<Obligation> list = new ArrayList<Obligation>();
                            list.add(obligation);
                            map.put(license, list);
                        }
                    }
                }
Ils étaient les suivants:

Utilisez flatMappour créer un flux de paires de Obligationet les ID de licence, puis utiliser groupingBypour les recueillir par ID de licence.

Map<String, List<Obligation>> map =
    obligations.stream() // Stream<Obligation>
               .flatMap(o -> o.getLicenseIDs()
                              .stream()
                              .map(id -> new SimpleEntry<>(o,id))) // Stream<Map.Entry<Obligation,String>>
               .collect(Collectors.groupingBy(Map.Entry::getValue,
                                              Collectors.mapping(Map.Entry::getKey,
                                                                 Collectors.toList())));

Je suppose que tu aimes

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