Hello,
Je dirais, parce que collect() prend un paramètre et que mapping() en prend deux ? Du coup en faisant l'inverse, ça ne marche pas trop...
groupingBy() ne peut pas tout faire en même temps, à un moment ils ont dû se limiter à un certain nombre de fonctionnalités.
Non il ne peut pas grouper puis mapper en un claquement de doigt sans rien faire soi-même. Ce n'est pas assez souvent utile. Le programmeur qui veut ça va devoir travailler plus.
Par défaut, groupingBy(), regroupe les éléments du groupe en les mettant dans une List. Autrement dit,
Collectors.groupingBy(OfferList::getInteractionPointName)
est équivalent à
Collectors.groupingBy(OfferList::getInteractionPointName, Collectors.toList())
Mais tu peux mettre ce que tu veux à la place de Collectors.toList(). Comme par exemple un truc qui va d'abord mapper les éléments vers autre chose, et ensuite les regrouper dans une List.
Donc si on imagine que ta méthode OfferList.getRecommendedOffers() renvoie un EmmOffer, alors tu peux faire :
1 2 3 4 5 6 7 8 9 10
| Map<String, List<EmmOffer>> map =
emmOfferResponses.stream().collect(
Collectors.groupingBy(
OfferList::getInteractionPointName,
Collectors.mapping(
OfferList::getRecommendedOffers,
Collectors.toList()
)
)
); |
Partager