TrongBang:
私は、マップオブジェクトの2つのリストを持っています。
"list1": [
{
"partyId": "1",
"accountId": "1",
"sourceSystem": "1",
},
{
"partyId": "2",
"accountId": "2",
"sourceSystem": "2",
}]
これはlist2のです。
"list2": [
{
"partyId": "3",
"accountId": "3",
"sourceSystem": "3",
},
{
"partyId": "1",
"accountId": "2",
"sourceSystem": "2",
}]
今、私はこの出力を持っているリスト1とリスト2をマージする必要があります。
"merged": [
{
"partyId": "1",
"accountId": "1",
"sourceSystem": "1",
},
{
"partyId": "2",
"accountId": "2",
"sourceSystem": "2",
},
{
"partyId": "3",
"accountId": "3",
"sourceSystem": "3",
}]
あなたはそれがLIST1とLIST2から1,2および3をマージ見ることができます。LIST2一つのPartyId = 1(また、LIST1における)が、有しているのでLIST1内のPartyId = 1が選択されているようにも、詳細(accountIdをとsourceSystem)が異なっています。
どのように私はJavaの8ストリームでこれを行うことができますか?それとも唯一の方法は、Javaオブジェクトに変換し、ループのために行うことです。
ラビンドラRanwala:
あなたは、一度にそれが好きですが、
List<Map<String, String>> resultMap = Stream.concat(mapListOne.stream(), mapListTwo.stream())
.collect(Collectors.groupingBy(m -> m.get("partyId"), Collectors.toList()))
.entrySet().stream()
.map(e -> e.getValue().get(0))
.collect(Collectors.toList());
これは、あなたが最初に計算する2段階の計算であるList
マップとしてそれぞれのPartyId値のためにマップのをして、それぞれの上に最初の要素を取得しList
、最終的な結果を計算します。