Java 8 arroyos, convertido Lista de objeto al mapa <String, Set <String >>

Bikas Katwal:

Ya he pasado por algunos ejemplos y los que no funcionó para mí.

Esto es lo que estoy tratando de hacer:

Tengo una List<SomeClass>de las clases siguientes:

class SomeClass {
  String rid;
  String name;
  ...
}

Los valores en mi Listtener este aspecto:

SomeClass(1,"apple")
SomeClass(1,"banana")
SomeClass(1,"orange")
SomeClass(2,"papaya")
SomeClass(2,"peaches")
SomeClass(3,"melons")

Quiero convertir lo anterior Listen una Map<String, Set<String>>, donde la clave es ridy el valor es Setde namecampo.

Para solucionar esto usando Java Streamsque estoy utilizando groupingByy que podría venir a continuación la solución:

someClassList
            .stream()
            .map(SomeClass::getName)
            .collect(
                  Collectors.groupingBy(
                      SomeClass::getRid, Collectors.toSet()));

Pero esto me da error de compilación. ¿Cómo puedo solucionar esto y cuál es el problema con mi enfoque?

Eran :

Cuando se llama .map(SomeClass::getName)en su Stream<SomeClass>, se obtiene una Stream<String>. No se puede ejecutar collect(Collectors.groupingBy(SomeClass::getRid,...))en un Stream<String>(solamente se pueden ejecutar en una Stream<SomeClass>). Por lo tanto, su mappaso es equivocado.

Tiene que pasar el Collectordevuelto por Collectors.mapping()que Collectors.groupingBy()con el fin de asignar los SomeClasscasos a Strings después de que se agrupan por getRid.

Map<String, Set<String>> map =
    someClassList.stream()
                 .collect(Collectors.groupingBy(SomeClass::getRid, 
                                                Collectors.mapping(SomeClass::getName,
                                                                   Collectors.toSet())));

Supongo que te gusta

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