User user =new User();
user.setAge=1;
user.setCount =1;
User user1 =new User();
user1.setAge =1;
user1.setCount=1
......
list.add(user);list.add(user1)....
我现在有一个集合list,里面的所有user的count都是1,age有很多多,我现在想要做的是吧list中所有age相同的user,合并成1个,count是这些age相同的user的个数,最后在吧这些放到新的list中。
因为最近接触了java8的stream(),好像有一个groupby的方法,list.stream.collect(xxxx),提问:用stream怎么写?有什么好的关于stream的资料吗??
GroupBy是个Collector,它是用来进行Stream上的collect操作的。Collect是一个Mutable Reduction。
所谓reduction,相当于把集合里的每一个元素依次带入一个函数,最终得到一个值。
比如求一组int的和,可以用reduction写作。
其中0是初始和,函数
(sum,n)->sum+n
对每个整数调用,最终得到所有数的和。而所谓Mutable Reduction。是指最终产生的值是个可变的对象,比如list。
回到GroupBy, 它会根据条件把数据产生为Map<条件,List<数据>>的形式。
所以如果用GroupBy做到你想要达到的效果,可以这样写:
当然也可以直接写collect的逻辑,不使用GroupBy产生的Map。
可以看到因为要找list里已经加入的user,所以这样写也并不简单,而且可能比map更加低效。