Javaの8ストリームの重複を選択するためのカスタムロジックで2非同等サイズのリストをマージする方法

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、最終的な結果を計算します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=201124&siteId=1