java stream tomap_java 8 stream toMap问题

最近使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值