Ich habe einen List<Set<Integer>>
und eine Map<Integer, List<Set<Integer>>>
wollen, die jede Integer
allen sets
abbildet, dass Integer
enthält.groupingBy Klassifikator mit mehreren Schlüsseln
Der offensichtliche Kandidat hier wäre Collectors.groupingBy
zu verwenden, aber es funktioniert nicht, da groupingBy
nur eine Klassifiziererfunktion ermöglicht, die einen Schlüssel zurückgibt. Ich müsste für jede Set
mehrere Schlüssel zurückgeben.
List<Set<Integer>> setList ...;
Map<Integer, List<Set<Integer>>> setMap = setList.stream().collect(
groupingBy(eachSet ->))
Hier ist ein Beispiel dafür, was ich ohne Ströme erreichen wollen:
List<Set<Integer>> setList ...
System.out.print("setList: ");
System.out.println(setList);
Map<Integer, List<Set<Integer>>> setMap = new HashMap<>();
for(Set<Integer> eachSet: setList) {
for(Integer i: eachSet) {
List<Set<Integer>> newSetList = setMap.getOrDefault(i, new ArrayList<>());
newSetList.add(eachSet);
setMap.putIfAbsent(i, newSetList);
}
}
System.out.print("setMap: ");
System.out.println(setMap);
Dies wird Ausgang der folgende:
setList: [[1], [1], [1, 3], [2, 3, 7]]
setMap: {1=[[1], [1], [1, 3]], 2=[[2, 3, 7]], 3=[[1, 3], [2, 3, 7]], 7=[[2, 3, 7]]}
I wie Ihre erste Annäherung am meisten, und ich bin gespannt, wie es mit der Wiederholung mit 'forEach 'wie in meiner Antwort zu tun vergleicht. – Roland