最近使用java的stream功能有点多,理由有2:
1)少写了不少代码
2)在性能可以接受的范围内
在巨大的collection基础上使用stream,没有什么经验。而非关键业务上,乐于使用stream。
--
工作中常常需要把ListMap转为Map>>,所以用toMap。
之所以这么做,主要两个理由:
1)业务需要
2)愿意使用key去寻找,而不是重复遍历数组。完成的代码比较友好,容易看,也容易理解。比较文字比数字友好
例子:
packagecom.hc.demomain.base.stream;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;importcom.alibaba.fastjson.JSONObject;public classStreamTest {public static voidmain(String[] args) {
List> stuList=new ArrayList>();
Map a1=new HashMap();
a1.put("className", "fujian");
a1.put("name", "a1");
a1.put("sex", "男");
stuList.add(a1);
Map a2=new HashMap();
a2.put("className", "fujian");
a2.put("name", "a2");
a2.put("sex", "女");
stuList.add(a2);
Map b1=new HashMap();
b1.put("className", "beijing");
b1.put("name", "b1");
b1.put("sex", "男");
stuList.add(b1);
Map b2=new HashMap();
b2.put("className", "beijing");
b2.put("name", "b2");
b2.put("sex", "女");
stuList.add(b2);
Map c1=new HashMap();
c1.put("className", "乌鲁木齐");
c1.put("name", "c1");
c1.put("sex", "女");
stuList.add(c1);
Map c2=new HashMap();
c2.put("className", "乌鲁木齐");
c2.put("name", "c2");
c2.put("sex", "男");
stuList.add(c2);
//使用className分组
Map>> destMap=stuList.stream().collect(Collectors.toMap(
item->item.get("className").toString(),v->{
List> list=new ArrayList>();
Map m=new HashMap();
m.put("name",v.get("name"));
m.put("sex",v.get("sex"));
list.add(m);returnlist;
},//重複處理
(List> oldList, List> newList) ->{
oldList.addAll(newList);returnoldList;
}
)
);
JSONArray srcObject = (JSONArray)JSONObject.toJSON(stuList);
System.out.println(JSONObject.toJSONString(srcObject, true));
JSONObject jsonObject=(JSONObject)JSONObject.toJSON(destMap);
System.out.println(JSONObject.toJSONString(jsonObject,true));
}
}
以下是原始的ListMap和转换后Map>> 的对比(为了方便阅读,使用fastJson格式化了下):
原始的ListMap:
[
{"name":"a1","className":"fujian","sex":"男"},
{"name":"a2","className":"fujian","sex":"女"},
{"name":"b1","className":"beijing","sex":"男"},
{"name":"b2","className":"beijing","sex":"女"},
{"name":"c1","className":"乌鲁木齐","sex":"女"},
{"name":"c2","className":"乌鲁木齐","sex":"男"}
]
通过toMap转换后获得的Map>>:
{"乌鲁木齐":[
{"name":"c1","sex":"女"},
{"name":"c2","sex":"男"}
],"beijing":[
{"name":"b1","sex":"男"},
{"name":"b2","sex":"女"}
],"fujian":[
{"name":"a1","sex":"男"},
{"name":"a2","sex":"女"}
]
}
下次有机会,专门比较下,不同写法的效率!
不过已经有人做过了试验,https://www.cnblogs.com/jpfss/p/11262231.html