Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用映射递归将数据分组简化为n次?_Java_Sorting_Arraylist - Fatal编程技术网

如何在java中使用映射递归将数据分组简化为n次?

如何在java中使用映射递归将数据分组简化为n次?,java,sorting,arraylist,Java,Sorting,Arraylist,我想通过以下方式将一组组组返回到n次 [ { “字段”:“TestContacts\u CompanyName”, “值”:“MC 1”, “hasSubgroups”:没错, “项目”:[ { “字段”:“TestContacts\u ID”, “价值”:“25”, “hasSubgroups”:false, “项目”:[ { “TestContacts_ID”:“25”, TestContacts_CompanyName:“MC 1” } ] },

我想通过以下方式将一组组组返回到n次

[
{
“字段”:“TestContacts\u CompanyName”,
“值”:“MC 1”,
“hasSubgroups”:没错,
“项目”:[
{
“字段”:“TestContacts\u ID”,
“价值”:“25”,
“hasSubgroups”:false,
“项目”:[
{           
“TestContacts_ID”:“25”,
TestContacts_CompanyName:“MC 1”
}      
]
},                  
{
“字段”:“TestContacts\u ID”,
“价值”:“26”,
“hasSubgroups”:false,
“项目”:[
{
“TestContacts_ID”:“26”,
TestContacts_CompanyName:“MC 1”
}          
]
},
{
“字段”:“TestContacts\u ID”,
“价值”:“27”,
“hasSubgroups”:false,
“项目”:[
{
“TestContacts_ID”:“27”,
TestContacts_CompanyName:“MC 1”
}
]
}
]
},
{
“字段”:“TestContacts\u CompanyName”,
“值”:“MC 2”,
“hasSubgroups”:没错,
“项目”:[
{“字段”:“TestContacts_ID”,
“价值”:“28”,
“hasSubgroups”:false,
“项目”:[
{
“TestContacts_ID”:“28”,
“TestContacts_CompanyName”:“MC 2”
}
]
}
]
}
]    
我不想使用收集器。groupingby

public static JSONArray groupedArray(ArrayList<String> groupField,JSONArray itemsArray) throws Exception {
        JSONArray itemArrayTemp = new JSONArray();
        int i=0;
         
         for (Map.Entry<String,ArrayList<Object>> entry : SLQUtil.groupData(groupField.get(i),itemsArray).entrySet()) {
                JSONObject itemTemp = new JSONObject();
             
                 itemTemp.put("field",groupField.get(i) );
                 itemTemp.put("value",entry.getKey() );
                 
             if((groupField.size()-i ==1)){
                 itemTemp.put("hasSubgroups",false );//Single level grouping
                 itemTemp.put("items",entry.getValue() );
             }else if((groupField.size()-i > 1)){
                 itemTemp.put("hasSubgroups",true );//2nd level grouping
                 JSONArray jsArray2 = new JSONArray(entry.getValue());//converting array list to json array
                 JSONArray itemArrayTemp2 = new JSONArray();
                 for (Map.Entry<String,ArrayList<Object>> entry2 : SLQUtil.groupData(groupField.get(i+1),jsArray2).entrySet()) {
                        JSONObject itemTemp2 = new JSONObject();
                     itemTemp2.put("field",groupField.get(i+1));
                     itemTemp2.put("value",entry2.getKey() );
                         itemTemp2.put("hasSubgroups",false );
                         itemTemp2.put("items",entry2.getValue() );
                 
                     itemArrayTemp2.put(itemTemp2 );//2nd level of grouped data
                 }
                 itemTemp.put("items",itemArrayTemp2 );
             }
             itemArrayTemp.put(itemTemp);//1st level of grouped data
         }

       return itemArrayTemp;
    }


    public static Map<String, ArrayList<Object>> groupData(String field,JSONArray itemsArray) throws  Exception {

        Map<String, ArrayList<Object>> itemMap = new LinkedHashMap<>();
        for (int i=0;i<itemsArray.length();i++){
            JSONObject itemTemp = itemsArray.getJSONObject(i);
            
            if(!itemMap.containsKey(itemTemp.getString(field))){
              itemMap.put(itemTemp.getString(field), new ArrayList<>());
            }
            itemMap.get(itemTemp.getString(field)).add(itemTemp);
        }

       return itemMap;
    }

publicstaticjsonarray-groupedArray(ArrayList-groupField,JSONArray-itemsArray)抛出异常{
JSONArray itemArrayTemp=新的JSONArray();
int i=0;
for(Map.Entry:SLQUtil.groupData(groupField.get(i),itemsArray.entrySet()){
JSONObject itemTemp=新的JSONObject();
itemTemp.put(“字段”,groupField.get(i));
itemTemp.put(“value”,entry.getKey());
if((groupField.size()-i==1)){
itemTemp.put(“hasSubgroups”,false);//单级分组
itemTemp.put(“items”,entry.getValue());
}else if((groupField.size()-i>1)){
itemTemp.put(“hasSubgroups”,true);//第二级分组
JSONArray jsArray2=新的JSONArray(entry.getValue());//将数组列表转换为json数组
JSONArray itemArrayTemp2=新的JSONArray();
for(Map.Entry entry2:SLQUtil.groupData(groupField.get(i+1),jsArray2.entrySet()){
JSONObject itemTemp2=新的JSONObject();
itemTemp2.put(“field”,groupField.get(i+1));
itemTemp2.put(“value”,entry2.getKey());
itemTemp2.put(“hasSubgroups”,false);
itemTemp2.put(“items”,entry2.getValue());
itemArrayTemp2.put(itemTemp2);//分组数据的第二级
}
itemTemp.put(“项目”,itemArrayTemp2);
}
itemArrayTemp.put(itemTemp);//分组数据的第一级
}
返回itemArrayTemp;
}
公共静态映射groupData(字符串字段,JSONArray itemsArray)引发异常{
Map itemMap=newlinkedhashmap();
for(int i=0;i
publicstaticmap-groupDataRecursive(stringcurrentkey,Map-Map,Map-out)抛出SQLException,Exception{
对于(Map.Entry:Map.entrySet()){
if(entry.getValue()instanceof Map){
groupDataRecursive(currentKey,(Map)entry.getValue(),out);
}否则{
Map tempMap=SLQUtil.groupData(currentKey,(JSONArray)entry.getValue());
put(entry.getKey(),tempMap);
//out.put(currentKey+“+entry.getKey(),entry.getValue());
}
}
返回图;
}
public static Map<String, Object> groupDataRecursive(String currentKey, Map<String, Object> map, Map<String, Object> out) throws SQLException, Exception {
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        if (entry.getValue() instanceof Map) {
            groupDataRecursive(currentKey, (Map<String, Object>) entry.getValue(), out);
        } else {
            Map tempMap = SLQUtil.groupData(currentKey,(JSONArray)entry.getValue());
            map.put( entry.getKey(),tempMap);
            //out.put(currentKey + "." + entry.getKey(), entry.getValue());
        }
    }
    return map;
}