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

时间:2018-02-27 16:37:41

标签: java json

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

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"));
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-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")));