博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA8 ARRAY、LIST操作 汇【5】)- JAVA8 LAMBDA LIST统计(求和、最大、最小、平均)...
阅读量:6873 次
发布时间:2019-06-26

本文共 3904 字,大约阅读时间需要 13 分钟。

 

public class Apple {    private Integer id;    private String name;    private BigDecimal money;    private Integer num;    public Apple(Integer id, String name, BigDecimal money, Integer num) {        this.id = id;        this.name = name;        this.money = money;        this.num = num;    }}

 

List
appleList = new ArrayList<>();//存放apple对象集合Apple apple1 = new Apple(1,"苹果1",new BigDecimal("3.25"),10);Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20);Apple apple2 = new Apple(2,"香蕉",new BigDecimal("2.89"),30);Apple apple3 = new Apple(3,"荔枝",new BigDecimal("9.99"),40);appleList.add(apple1);appleList.add(apple12);appleList.add(apple2);appleList.add(apple3);

 

 
list.stream().mapToDouble(User::getHeight).sum()//和list.stream().mapToDouble(User::getHeight).max()//最大list.stream().mapToDouble(User::getHeight).min()//最小list.stream().mapToDouble(User::getHeight).average()//平均值
 

 

1. List转Mapid为key,apple对象为value,可以这么做:/** * List -> Map * 需要注意的是: * toMap 如果集合对象有重复的key,会报错Duplicate key .... *  apple1,apple12的id都为1。 *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 */Map
appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));打印appleMap:{1=Apple{id=1, name='苹果1', money=3.25, num=10}, 2=Apple{id=2, name='香蕉', money=2.89, num=30}, 3=Apple{id=3, name='荔枝', money=9.99, num=40}}

 

2. 分组 List里面的对象元素,以某个属性来分组,例如,以id分组,将id相同的放在一起://List 以ID分组 Map
>Map
> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));System.err.println("groupBy:"+groupBy);{1=[Apple{id=1, name='苹果1', money=3.25, num=10}, Apple{id=1, name='苹果2', money=1.35, num=20}], 2=[Apple{id=2, name='香蕉', money=2.89, num=30}], 3=[Apple{id=3, name='荔枝', money=9.99, num=40}]}

 

3. 过滤filter: 从集合中过滤出来符合条件的元素(map只是覆盖属性,filter根据判断属性来collect宿主bean)://过滤出符合条件的数据List
filterList = appleList.stream().filter(a -> a.getName().equals("香蕉")).collect(Collectors.toList());System.err.println("filterList:"+filterList);[Apple{id=2, name='香蕉', money=2.89, num=30}]

 

 

4. 求和: 将集合中的数据按照某个属性求和:BigDecimal://计算 总金额BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);System.err.println("totalMoney:"+totalMoney); //totalMoney:17.48Integer://计算 数量int sum = appleList.stream().mapToInt(Apple::getNum).sum();System.err.println("sum:"+sum); //sum:100List
cc = new ArrayList<>();cc.add(1);cc.add(2);cc.add(3);int sum = cc.stream().mapToInt(Integer::intValue).sum();//6

 

 

★5    Collectors.groupingBy进行分组、排序等操作:import javaX.Model.Student;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.function.Function;import java.util.stream.Collectors;public class FunctionX {    public static void main(String[] args) {        //1.分组计数        List
list1= Arrays.asList(new Student(1,"one","zhao"),new Student(2,"one","qian"),new Student(3,"two","sun")); //1.1根据某个属性分组计数 Map
result1=list1.stream().collect(Collectors.groupingBy(Student::getGroupId,Collectors.counting())); System.out.println(result1); //1.2根据整个实体对象分组计数,当其为String时常使用 Map
result2=list1.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting())); System.out.println(result2); //1.3根据分组的key值对结果进行排序、放进另一个map中并输出 Map
xMap=new HashMap<>(); result1.entrySet().stream().sorted(Map.Entry.
comparingByKey().reversed()) //reversed不生效 .forEachOrdered(x->xMap.put(x.getKey(),x.getValue())); System.out.println(xMap); //2.分组,并统计其中一个属性值得sum或者avg:id总和 Map
result3=list1.stream().collect( Collectors.groupingBy(Student::getGroupId,Collectors.summingInt(Student::getId)) ); System.out.println(result3); }}

转载地址:http://qupfl.baihongyu.com/

你可能感兴趣的文章
getGeneratedKeys()返回自增主键值
查看>>
随机数创建点shp文件
查看>>
TOJ 2710: 过河 路径压缩
查看>>
javascript中null与undefined的区别
查看>>
mysql之select(二)
查看>>
万能分页存储过程
查看>>
jQuery模板插件jsrender
查看>>
内部类概述
查看>>
linux ln 命令使用参数详解(ln -s 软链接)
查看>>
结队开发项目—NABC模型
查看>>
qt5.4解决输出中文乱码问题
查看>>
深入分析Java ClassLoader原理
查看>>
Vim编辑器
查看>>
Codevs 3304 水果姐逛水果街Ⅰ 线段树
查看>>
linux共享windows资料
查看>>
前端UI框架总结
查看>>
( component 标签元素,及其 :is 属性 )的使用样例(组件切换的一个简单样例,不过,最好使用动画来实现组件的切换)...
查看>>
这7个人生捷径,一定不要走!
查看>>
Koa2+Mysql搭建简易博客
查看>>
Atom 初识
查看>>