J'ai donc ce code qui « fonctionne » (remplacer certains noms pour la simplicité):En utilisant groupingBy dans une carte imbriquée, mais la collecte à un autre type d'objet
Map<String, Map<String, ImmutableList<SomeClassA>>> someMap =
someListOfClassA.stream()
.filter(...)
.collect(Collectors.groupingBy(SomeClassA::someCriteriaA,
Collectors.groupingBy(SomeClassA::someCriteriaB, GuavaCollectors.toImmutableList()
)
));
Cependant, je veux changer ce code de sorte que la collection interne est de SomeClassB après le regroupement par des champs SomeClassA. Par exemple, si les classes ressemblent à ceci:
en supposant qu'ils ont tous les deux tous args constructeurs
class SomeClassA {
String someCriteriaA;
String someCriteriaB;
T someData;
String someId;
}
class SomeClassB {
T someData;
String someId;
}
Et il y a une méthode quelque part:
public static Collection<SomeClassB> getSomeClassBsFromSomeClassA(SomeClassA someA) {
List<Some List of Class B> listOfB = someMethod(someA);
return listOfB; // calls something using someClassA, gets a list of SomeClassB
}
Je veux aplatir les listes résultant de SomeClass Bs dans
Map<String, Map<String, ImmutableList<SomeClassB>>> someMap =
someListOfClassA.stream()
.filter(...)
. // not sure how to group by SomeClassA fields but result in a list of SomeClassB since one SomeClassA can result in multiple SomeClassB
Je ne sais pas comment cela rentrerait dans le code abov e. Comment puis-je recueillir un ensemble de listes basées sur SomeClassB dans une seule liste pour toutes les valeurs de SomeClassA? Si un seul ClassA correspond à un ClassB unique, je sais comment le faire fonctionner en utilisant Collectors.mapping mais comme chaque ClassA donne plusieurs ClassBs, je ne sais pas comment le faire fonctionner.
Toutes les idées seraient appréciées. Merci!
En Java 9 vous aurez [ 'Collectors.flatMapping()'] (http://download.java.net/java/jdk9/ docs/api/java/util/flux/Collectors.html # flatMapping-java.util.function.Function-java.util.stream.Collector-), ce qui vous permettra d'aplatir les résultats en aval du regroupement. – shmosel