lambda表达式


源码:

链接:https://pan.baidu.com/s/17G56uQDm6CiogAw0WrYBmA 
提取码:36eb
public class User {

    private int id;

    private String name;

    private String sex;
    
    private int age;

    private int sellNum;

    private BigDecimal salary;
    //................
}
        User u1 = new User(1,"老王","男",25,1,new BigDecimal(12000));
        User u2 = new User(2,"老刘","女",24,3,new BigDecimal(15000));
        User u3 = new User(3,"老李","男",25,1,new BigDecimal(11000));
        User u4 = new User(4,"老魏","女",26,1,new BigDecimal(10000));
        User u5 = new User(5,"老赵","男",25,1,new BigDecimal(12000));
        User u6 = new User(6,"老楚","女",24,2,new BigDecimal(14000));
        User u7 = new User(7,"老朱","男",29,1,new BigDecimal(11000));
        User u8 = new User(8,"老陈","女",26,4,new BigDecimal(14000));
        List<User> list = new ArrayList<User>();
        Collections.addAll(list,u1,u2,u3,u4,u5,u6,u7,u8);

        List<String> list1 = new ArrayList<>();
        Collections.addAll(list1,"1","2","5","2","3","6","1","2");

        User u9 = new User(9,"老汤","女",26,4,new BigDecimal(14000));
        User u10 = new User(10,"老任","女",25,4,new BigDecimal(14000));
        User u11 = new User(11,"老覃","女",24,4,new BigDecimal(14000));
        List<User> list2 = new ArrayList<User>();
        Collections.addAll(list2,u1,u3,u5,u9,u10,u11);

1. lambda表达式遍历list集合

        /**
         * lambda表达式遍历list集合
         */
        list.forEach(user ->
                System.out.println(user.getName())
        );

2. groupingBy

        /**
         * groupingBy (List<T>转Map<String, List<T>>): 分组指定字段,指定字段为key,符合条件的放到一个一个集合中
         */
        Map<String, List<User>> listMap = list.stream()
                .collect(Collectors.groupingBy(User::getSex));

        listMap.forEach((key,value)->{
            System.out.println(key + "==" + value);
        });

3. filter条件过滤

        /**
         * filter条件过滤
         */
        List<User> filterList = list.stream()
                .filter(user -> !"男".equals(user.getSex()))
                .collect(Collectors.toList());
        for (User user : filterList) {
            System.out.println(user.getName());
        }

4. filter多条件过滤,多个条件中间用&&或者||连接

        /**
         * filter多条件过滤,多个条件中间用&&或者||连接
         */
        List<User> filterList = list.stream()
                .filter(user -> !"男".equals(user.getSex()) && user.getAge() == 24)
                .collect(Collectors.toList());
        for (User user : filterList) {
            System.out.println(user.getName());
        }

5. 求和 基本类型

        /**
         * 求和 基本类型
         * mapToInt
         * mapToDouble
         * mapToLong
         */
        int sum = list.stream()
                .mapToInt(User::getSellNum)
                .sum();
        System.out.println(sum);

6. 求和 大数据类型(例如BigDecimal)

        /**
         * 求和 大数据类型(例如BigDecimal)
         */
        BigDecimal reduce = list.stream()
                .map(User::getSalary)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        System.out.println(reduce);

7. 最小值

        /**
         * 最小值
         * min(Integer::compareTo) 中Integer是求最小值字段的类型
         */
        Integer min = list.stream()
                .map(User::getAge)
                .min(Integer::compareTo)
                .get();
        System.out.println(min);

8. 最大值

        /**
         * 最大值
         */
        Integer max = list.stream()
                .map(User::getAge)
                .max(Integer::compareTo)
                .get();
        System.out.println(max);

9. 求和,最大值,最小值,平均值

        /**
         * 求和,最大值,最小值,平均值
         */
        LongSummaryStatistics collect = list.stream()
                .collect(Collectors.summarizingLong(User::getAge));
        System.out.println("sum = " + collect.getSum());
        System.out.println("max = " + collect.getMax());
        System.out.println("min = " + collect.getMin());
        System.out.println("avg = " + collect.getAverage());

10. list转map 没有重复键

        /**
         * list转map 没有重复键
         */
        Map<Integer, User> collect = list.stream()
                .collect(Collectors.toMap(User::getId, user -> user));
        for (Map.Entry<Integer, User> entry : collect.entrySet()) {
            System.out.println(entry.toString() + "==" + entry.getValue().toString());
        }

11. list转map 有重复键

        /**
         * list转map 有重复键
         * toMap 如果集合对象有重复的key,会报错 java.lang.IllegalStateException: Duplicate key
         * 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
         */
        Map<Integer, User> collect = list.stream()
                .collect(Collectors.toMap(User::getAge, user -> user,(k1,k2)->k1));
        for (Map.Entry<Integer, User> entry : collect.entrySet()) {
            System.out.println(entry.toString() + "==" + entry.getValue().toString());
        }

12. 单个字段排序(升序) 1->10

        /**
         * 单个字段排序(升序)  1->10
         */
        list.sort(Comparator.comparing(User::getId));
        list.forEach(user -> System.out.println(user));

13. 单个字段排序(降序) 10->1

        /**
         * 单个字段排序(降序)  10->1
         */
        list.sort(Comparator.comparing(User::getId).reversed());
        list.forEach(user -> System.out.println(user));

14. 多个字段排序

        /**
         * 多个字段排序
         */
        //升序  升序
        list.sort(Comparator.comparing(User::getAge).thenComparing(User::getSellNum));
        //升序  降序
        list.sort(Comparator.comparing(User::getAge).thenComparing(Comparator.comparing(User::getSellNum).reversed()));
        //降序  降序
        list.sort(Comparator.comparing(User::getAge).thenComparing(User::getSellNum).reversed());
        //降序  升序
        list.sort(Comparator.comparing(User::getAge).reversed().thenComparing(User::getSellNum));
        list.forEach(user -> System.out.println(user));

15. distinct() 去重

        /**
         * distinct() 去重
         */
        List<String> collect = list1.stream()
                .distinct()
                .collect(Collectors.toList());
        System.out.println(collect);

16. 获取list某个字段组装成新的list

        /**
         * 获取list某个字段组装成新的list
         */
        List<String> collect = list.stream()
                .map(user -> user.getName())
                .collect(Collectors.toList());
        System.out.println(collect);

17. 交集

        /**
         * 交集
         */
        List<User> collect = list.stream()
                .filter(user -> list2.contains(user))
                .collect(Collectors.toList());
        collect.forEach(user -> System.out.println(user));

18. 差集

        /**
         * 差集
         */
        List<User> collect = list.stream()
                .filter(user -> !list2.contains(user))
                .collect(Collectors.toList());
        collect.forEach(user -> System.out.println(user));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值