Java 基于JSONArray中可用的公共编号对元素进行分组

Java 基于JSONArray中可用的公共编号对元素进行分组,java,json,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},

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

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个1,1个2和1个3。所以,我总共有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"));
                }
            }
        }
List al=new ArrayList();

对于(inti=0;i最后,我找到了将公共JSONArray元素分组的方法

Map<Object, List<JSONObject>> numberMap = IntStream.range(0, lineItemsArray.length())
            .mapToObj(index -> (JSONObject) lineItemsArray.get(index))
            .collect(Collectors.groupingBy(item -> item.get("number")));
Map numberMap=IntStream.range(0,lineItemsArray.length())
.mapToObj(索引->(JSONObject)lineItemsArray.get(索引))
.collect(Collectors.groupby(item->item.get(“number”));

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

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

有关更简单的解决方案,请参见我的答案:您根本不需要为数组的索引操心。