Lista Recolha <Object> para Map <String, List <Object >> em Java 8 usando fluxo

akapti:

Eu estou tentando fazer isso iteração usando fluxo de java 8 em vez de tradicional para loop.

Eu tenho uma lista de objetos List<Obligation>e Obligationestá tendo Listde Stringdentro.

Obligation contém campos como

f1e f2do tipo String,

e

f3 do tipo List<String>

O que eu quero alcançar é Map<String, List<Obligation>>tal que, Stringusado na chave de Mapé cada valor presente em List<String>de cada um ObligationdentroList<Obligation>

Isto é como o código ficaria na tradicional para loop:

// 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);
                        }
                    }
                }
Eles foram:

Use flatMappara criar um fluxo de pares de Obligatione IDs de licença e, em seguida, usar groupingBya recolhê-los por ID de licença.

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())));

Acho que você gosta

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