Ich habe zwei Karten zu kombinieren und glätten:Java 8 lambdas/Transformationen Mit zwei Karten
Map<A, Collection<B>> mapAB
Map<B, Collection<C>> mapBC
Ich möchte sie in eine Map<A, Collection<C>> mapAC
verwandeln, und ich bin Ich frage mich, ob es einen reibungslosen Weg gibt, dies mit Lambdas und Transformationen zu tun. In meinem speziellen Fall sind die Sammlungen alle Sets, aber ich möchte das Problem für Sammlungen im Allgemeinen lösen.
Ein Gedanke, den ich hatte, war, zuerst die zwei Karten zu einem Map<A, Map<B, Collection<C>>>
zu kombinieren und es dann zu glätten, aber ich bin für jede Annäherung offen.
Daten Hinweise: B
sollten nur in der Werterfassung mit einem A
, assoziiert auftreten und das gleiche gilt für mapBC
(a gegeben C
nur von einer B
abgebildet wird). Infolgedessen sollte es nur ein Pfad von einer gegebenen A
zu einem C
gegeben werden, obwohl es A -> B
Mappings werden, für die es keine B -> C
Mappings und dort B -> C
Mappings, für die sein kann, keine entsprechenden A -> B
Mappings dort sind. Diese Waisen erscheinen einfach nicht in der resultierenden mapAC
.
Aus Gründen des Vergleichs, hier ist ein Beispiel für eine reinen Imperativ Annäherung an das gleiche Problem:
Map<A, Collection<C>> mapAC = new HashMap<>();
for (Entry<A, Collection<B>> entry : mapAB.entrySet()) {
Collection<C> cs = new HashSet<>();
for (B b : entry.getValue()) {
Collection<C> origCs = mapBC.get(b);
if (origCs != null) {
cs.addAll(origCs);
}
}
if (!cs.isEmpty()) {
mapAC.put(entry.getKey(), cs);
}
}
Möchten Sie eine Verknüpfung von zwei Eins-zu-viele-Beziehungen ohne die mittlere Spalte? –
@MikeSamuel Ja, das ist definitiv eine Möglichkeit, es zu betrachten. –
Können Sie ein Beispiel für Daten hinzufügen? Zum Beispiel, wenn wir 'Map>' und 'Map >' haben, ist es für verschiedene Leute möglich, denselben Job zu haben, oder für wenige Jobs dieselben Tools zu verwenden? Ist also etwas wie "p1 -> {j1, j2}, p2 -> {j2, j3}" möglich? Auch 'job1 -> {tool1, tool2} job2 -> {tool2, tool3} job3 -> {tool4}'? Welche Ergebnisse erwarten Sie? Möchten Sie auch 'Collection ' 'Set' sein oder können Elemente mehrfach darin existieren? –
Pshemo