【问题标题】:Merge elements of array based on index position or id根据索引位置或 id 合并数组元素
【发布时间】:2020-09-11 19:41:21
【问题描述】:

我有一个从数据库中获取的列表数组。我想创建一个新列表,其中数组中的所有元素按索引位置或 id 分组。

这是我正在使用的数组:

[
    {
        "content": "Content A1",
        "id": 1
    },
    {
        "content": "Content A2",
        "id": 2
    },
    {
        "content": "Content A3",
        "id": 3
    },
    {
        "content": "Content A4",
        "id": 4
    },
    {
        "content": "Content A5",
        "id": 5
    }
]

[
    {
        "content": "Content B1",
        "id": 1
    },
    {
        "content": "Content B2",
        "id": 2
    },
    {
        "content": "Content B3",
        "id": 3
    },
    {
        "content": "Content B4",
        "id": 4
    },
    {
        "content": "Content B5",
        "id": 5
    }
]

[
    {
        "content": "Content C1",
        "id": 1
    },
    {
        "content": "Content C2",
        "id": 2
    },
    {
        "content": "Content C3",
        "id": 3
    },
    {
        "content": "Content C4",
        "id": 4
    },
    {
        "content": "Content C5",
        "id": 5
    }
]

这就是我希望新 List 数组的样子:

[
{
     "content": {"Content A1","Content B1","Content C1"}
     "id": 1
},
{
     "content": {"Content A2", "Content B2", "Content C2"}
     "id": 2
},
{
     "content": {"Content A3","Content B3","Content C3"}
     "id": 3
},
{
     "content": {"Content A4","Content B4","Content C4"}
     "id": 4
},
{
     "content": {"Content A5","Content B5","Content C5"}
     "id": 5
}
]

我试过这段代码,但它只返回最后一个对象:

  List<String> contentArray = new ArrayList<>();
  for (int i = 0; i < b.listDetail.size(); i++) {
                int finalI = i;
                contentArray = listResource.stream()
                        .map(a -> a.listDetail.get(finalI).content)
                        .collect(Collectors.toList());
              
   }
  System.out.println(contentArray);

【问题讨论】:

  • 那么你是合并3个数组还是n个数组?
  • @cela,n 个数组。

标签: java arrays list


【解决方案1】:

你几乎完成了,只需要将 contentArray 存储在所有索引的列表中。

  List<List<String>> res = new ArrayList<>();
  for (int i = 0; i < b.listDetail.size(); i++) {
       int finalI = i;
       List<String> contentArray = listResource.stream()
                        .map(a -> a.listDetail.get(finalI).content)
                        .collect(Collectors.toList());
       res.add(contentArray); // store all contents for a index in list
  }

您可以使用idcontents 为您的响应创建一个类,并在内部循环构造并添加到列表中。

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2021-01-11
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    相关资源
    最近更新 更多