ここに問題があります。Java8 2つの異なるオブジェクトストリームから3番目のオブジェクトのソートされたリストへのデータの収集
Map<Id,ObjectClassA> mapObjectClassA
と
Map<Id,ObjectClassB> mapObjectClassB
どちらも、これらのマップは同じサイズのものである - 私は2つのマップを持って
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;
}
}
と
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;
}
}
:以下のように私は三つのクラスを持っています。 IDキーは両方のマップに共通です。その目的は、(ObjectClassC.name
で)ようにList<ObjectClassC>
オブジェクトソートを作成するために、いずれかのマップを反復処理することである:これは私が今持っているロジックです
ObjectClassC.name = ObjectClassA.name
ObjectClassC.isReadOnly = ObjectClassA.isReadOnly || ObjectClassB.isReadOnly
ObjectClassC.location = ObjectClassB.location
を次のようになります。
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());
私のマッピングコレクションは正常に動作していますが、私はObjectClassC
オブジェクトのソートされたコレクションを取得しません。誰かが間違っているところを指摘してくれますか?
あなたは、単純な作業[MCVE]を投稿することができますか? 'sorted'演算は名前でソートされるべきです。サンプル入力ではどのような出力が得られますか? – Tunaki
コードにかなりの数のタイプミスがあります。 '.sorted'行の最後に') 'がありません。 'a.getId'には'() 'はありません。 'new ObjectClassC'部分の余分な中カッコです。本当にコピー&ペーストする方が良いでしょう。 –
'ObjectClassC'に' location'という2つのフィールドを持つことはできません。 – Andreas