关于对List求得分组的问题,如何对List对象内的内容进行分组,分组后转为Map方便操作
大概数据结构是这样的
数据行:
第一行:行号10,存货001,MS行号01;
第二行:行号10,存货001,MS行号02;
第三行:行号10,存货001,MS行号03;
第四行:行号20,存货002,MS行号04;
第五行:行号30,存货003,MS行号05;
第六行:行号30,存货003,MS行号06;
第七行:行号40,存货004,MS行号07;
模拟对象代码,暂时用map代替了:
List<Map<String,String>> list = new ArrayList<>();
Map<String,String> map1 = new HashMap<>();
map1.put("lineNo", "10");
map1.put("suid", "001");
map1.put("ms", "01");
list.add(map1);
Map<String,String> map2= new HashMap<>();
map2.put("lineNo", "10");
map2.put("suid", "001");
map2.put("ms", "02");
list.add(map2);
Map<String,String> map3= new HashMap<>();
map3.put("lineNo", "10");
map3.put("suid", "001");
map3.put("ms", "03");
list.add(map3);
Map<String,String> map4= new HashMap<>();
map4.put("lineNo", "20");
map4.put("suid", "002");
map4.put("ms", "04");
list.add(map4);
Map<String,String> map5= new HashMap<>();
map5.put("lineNo", "30");
map5.put("suid", "003");
map5.put("ms", "05");
list.add(map5);
Map<String,String> map6= new HashMap<>();
map6.put("lineNo", "30");
map6.put("suid", "003");
map6.put("ms", "06");
list.add(map6);
Map<String,String> map7= new HashMap<>();
map7.put("lineNo", "40");
map7.put("suid", "004");
map7.put("ms", "07");
list.add(map7);
由于客户环境是JDK1.7的,我想不到好的解决办法,希望帮个忙解答一下。
我希望将以上数据行分组后转为以下结构,方便我对分组后的内容进行操作。
Map<行号+存货,List<数据行>> map = new HashMap<String , List<数据行>>();
Map<String, List<Map<String,String>>> map = new HashMap<>();
jdk1.7的话,那遍历判断,创建map节点就行了。
import java.util.*;
public class Test {
public static void main(String[] args) {
Map<String, List<Map<String,String>>> map = new HashMap<>();
List<Map<String,String>> list = new ArrayList<>();
Map<String,String> map1 = new HashMap<>();
map1.put("lineNo", "10");
map1.put("suid", "001");
map1.put("ms", "01");
list.add(map1);
Map<String,String> map2= new HashMap<>();
map2.put("lineNo", "10");
map2.put("suid", "001");
map2.put("ms", "02");
list.add(map2);
Map<String,String> map3= new HashMap<>();
map3.put("lineNo", "10");
map3.put("suid", "001");
map3.put("ms", "03");
list.add(map3);
Map<String,String> map4= new HashMap<>();
map4.put("lineNo", "20");
map4.put("suid", "002");
map4.put("ms", "04");
list.add(map4);
Map<String,String> map5= new HashMap<>();
map5.put("lineNo", "30");
map5.put("suid", "003");
map5.put("ms", "05");
list.add(map5);
Map<String,String> map6= new HashMap<>();
map6.put("lineNo", "30");
map6.put("suid", "003");
map6.put("ms", "06");
list.add(map6);
Map<String,String> map7= new HashMap<>();
map7.put("lineNo", "40");
map7.put("suid", "004");
map7.put("ms", "07");
list.add(map7);
for(Map<String,String> m:list){
String key=m.get("lineNo")+m.get("suid");
if (map.containsKey(key)){
map.get(key).add(m);
}else{
List<Map<String, String>> mp=new ArrayList<>();
mp.add(m);
map.put(key,mp);
}
}
System.out.println(map);
}
}
public static void main (String [] args) {
Map<String, List<Map<String,String>>> map = new HashMap<>();
for(Map<String,String> m : list) {
String str = m.get("lineNo") + m.get("suid");
if(map.containsKey(str)) {
map.get(str).add(m);
} else {
List<Map<String,String>> tmpList = new ArrayList<>();
tmpList.add(m);
map.put(str, tmpList);
}
}
}
定义一个class就行了呀