Deprecated: Required parameter $cat_id follows optional parameter $type in /www/wwwroot/ebimall.com/systems/hong.php on line 2088

Deprecated: Required parameter $where follows optional parameter $tree_id in /www/wwwroot/ebimall.com/systems/hlb.php on line 3505
在一个lambda表达式中收集复杂对象 IT屋程序员软件开发技术...188bio精品生物—专注于实验室精品爆款的电商平台 - 蚂蚁淘旗下精选188款生物医学科研用品
您好,欢迎您进入188进口试剂采购网网站! 服务热线:4000-520-616
蚂蚁淘商城 | 现货促销 | 科研狗 | 生物在线

在一个lambda表达式中收集复杂对象 IT屋程序员软件开发技术...

我有一个对象列表。首先,我需要按类型对其进行排序。
比faceValue。最后,总结所有数量:



 class Coin {
String type;
BigInteger faceValue;
BigInteger数量;
...
}

列表 Coin coins = new ArrayList ();
coins.add(新币(\"USD\",1,150));
coins.add(新币(\"USD\",1,6));
coins.add(新币(\"USD\",1,60));
coins.add(新币(\"USD\",2,100));
coins.add(新币(\"USD\",2,100));
coins.add(新币(\"CAD\",1,111));
coins.add(新币(\"CAD\",1,222));


结果列表必须只包含3个新的硬币对象:



 硬币(\"USD\",1,216)
硬币(\"USD\",2,200)
硬币(\"CAD\",1,333) )


如何仅在一个lambda表达式中编写?


解决方案

您可以使用 Collectors.toMap 解决这个问题:



 public List Coin groupsCoins(List Coin coins){
返回新的ArrayList (
coins.stream()
.collect(Collectors.toMap(
coin - Arrays。 asList(coin.getType(),coin.getFaceValue()),Function.identity(),
(coin1,coin2) - {
BigInteger netQ = coin1.getQuantity()。add(coin2 .getQuantity());
返回新的Coin(coin1.getType(),coin1.getFaceValue(),netQ);
}))
.values());
}


或更复杂的一个班轮分组和总和:



 public List Coin groupedAndSummedCoins(List Coin coins){
return coins.stream()
.collect(Collectors.groupingBy(Coin :: getType,
Collectors.groupingBy(Coin :: getFaceValue,$ b) $ b Collectors.reducing(BigInteger.ZERO,Coin :: getQuantity,BigInteger :: add))))
.entrySet()
.stream()
.flatMap(e - e.getValue()。entrySet()。stream()
.map(a - new Coin(e.getKey(),a.getKey(),a.getValue())))
.collect(Collectors.toList());
}

本文地址:IT屋 在一个lambda表达式中收集复杂对象


新闻动态
行业前沿
技术文章
最新产品

188进口试剂采购网 www.188bio.cn -中国试剂网,试剂网,化学试剂网,国药试剂,抗体公司,试剂公司,试剂盒公司,苏州试剂公司,北京化学试剂公司,天津化学试剂,试剂商城,试剂代理,流式抗体 细胞库查询 sitemap