根据JSONArray中可用的公共号对组件进行分组

问题描述 投票:-1回答:2

我必须对数组元素进行分组(基于公共数字)并为每个组创建一个单独的数组。例如

Array structure = [{Location, Date, Number}]

array = [{ 'LA','2017-12-01',1},
         { 'LA','2017-12-01',1},
         { 'NY','2017-12-01',2},
         { 'NY','2016-10-01',3},
         { 'LA','2017-12-01',1},
         { 'LA','2017-12-01',1},
         { 'LA','2017-12-01',1}]`

在上面的数组中我有6个ONES,1个TWO和1个THREE。所以,我总共有3组,我必须为每组创建3个阵列。问题是无法为每个组创建单独的数组,并且无法正确循环。

请找到我正在尝试的下面的代码。

List al=new ArrayList();
for(int i=0;i<lineItemsArray.length();i++)
    {
        JSONObject lineObj1 = lineArr.getJSONObject(i);
        for(int j=0;j<lineItemsArray.length();j++)
        {
            JSONObject  lineObj2 = lineArr.getJSONObject(j);
            if(lineObj1.getString("number")
                    .equalsIgnoreCase(lineObj2.getString("number")))
                {
                    al.add(lineObj2.getString("number"));
                }
            }
        }
java json
2个回答
1
投票

您应该使用Arrays.stream将数组转换为流并将其分组:

Map<Object, List<JSONObject>> numberMap = Arrays.stream(lineItemsArray).collect(Collectors.groupingBy(item -> item.get("number")));

-1
投票

最后,我得到了将常见的JSONArray元素分组的方法。

Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
            .mapToObj(index -> (JSONObject) lineItemsArray.get(index))
            .collect(Collectors.groupingBy(item -> item.get("number")));
© www.soinside.com 2019 - 2024. All rights reserved.