Also hier ist das Problem. Ich habe drei Klassen wie folgt:Java8 Sammeln von Daten aus 2 verschiedenen Objektströmen zu einer sortierten Liste von 3rd Objekt
class ObjectClassA
{
private final long id;
private final String name;
private final boolean isReadOnly;
//<some more fields>
long getId()
{
return this.id;
}
String getName()
{
return this.name;
}
boolean isReadOnly()
{
return this.isReadOnly;
}
}
class ObjectClassB
{
private final long id;
private final String location;
private final boolean isReadOnly;
//<some more fields>
long getId()
{
return this.id;
}
String getLocation()
{
return this.location;
}
boolean isReadOnly()
{
return this.isReadOnly;
}
}
und
class ObjectClassC
{
private final String location;
private final boolean isReadOnly;
private final String location;
String getName()
{
return this.name;
}
boolean isReadOnly()
{
return this.isReadOnly;
}
String getLocation()
{
return this.location;
}
}
Ich habe 2 Karten -
Map<Id,ObjectClassA> mapObjectClassA
und
Map<Id,ObjectClassB> mapObjectClassB
Beide Karten sind von der gleichen Größe . Die ID-Schlüssel sind beiden Karten gemeinsam. Ziel ist es entweder über Karten iterieren List<ObjectClassC>
Objekte eine sortierte (von ObjectClassC.name
) zu schaffen, so dass:
ObjectClassC.name = ObjectClassA.name
ObjectClassC.isReadOnly = ObjectClassA.isReadOnly || ObjectClassB.isReadOnly
ObjectClassC.location = ObjectClassB.location
Das ist die Logik, die ich jetzt habe, ist wie folgt:
final List<ObjectClassC> list =
mapObjectClassA.values()
.stream()
.map(a -> {
new ObjectClassC(a.getName(),
a.isReadOnly() || mapObjectClassB.get(a.getId).isReadOnly(),
mapObjectClassB.get(a.getId).getLocation())
})
.sorted(Comparator.comparing(ObjectClassC::getName))
.collect(Collectors.<ObjectClassC> toList());
Meine Mapping und Sammlung funktionieren gut, aber ich bekomme keine sortierte Sammlung von ObjectClassC
Objekten. Könnte jemand bitte darauf hinweisen, wo ich falsch liege?
Können Sie eine einfache Arbeit [MCVE] posten? Die 'sortierte' Operation sollte nach Namen sortiert werden. Welche Ausgabe erhalten Sie mit einer Beispieleingabe? – Tunaki
Es gibt einige Tippfehler in Ihrem Code. Missing ')' am Ende der '.sorted' Zeile; no '()' auf 'a.getId'; zusätzliche Klammern um den 'neuen ObjektClassC'-Teil. Es wäre wirklich besser zu kopieren und einzufügen. –
Sie können in 'ObjectClassC' nicht zwei Felder namens' location' haben. – Andreas