Stream流的常用方法

目录

1.filter过滤

2.map转换

 3.distinct去重

4.groupingBy分组

 5.skip跳过,limit截取,skip结合limit实现分页功能

 6.sorted排序

7.max、min 获取最大值、最小值

 8.List转Map

 8.peek

9.mapToInt、mapToDouble、mapToLong求和


1.filter过滤

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 23));
        list.add(new User("李四", "女", 25));
        list.add(new User("王五", "女", 32));
        list.add(new User("赵六", "男", 54));
        //过滤出年龄大于30岁的
        List<User> users = list.stream()
                .filter(u -> u.getAge() > 30)
                .collect(Collectors.toList());

        //过滤出年龄大于30并且性别是男的
        List<User> userList = list.stream()
                .filter(m -> m.getAge() > 30 && "男".equals(m.getSex()))
                .collect(Collectors.toList());

        System.out.println(users);
        System.out.println(userList);
    }
}

结果:

2.map转换

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 23));
        list.add(new User("李四", "女", 25));
        list.add(new User("王五", "女", 32));
        list.add(new User("赵六", "男", 54));

        //User转String
        List<String> names = list.stream().map(User::getName).collect(Collectors.toList());
        //User转Map
        List<Map> maps = list.stream().map(m -> {
            Map map = new HashMap<>();
            map.put("name", m.getName());
            map.put("sex", m.getSex());
            return map;
        }).collect(Collectors.toList());
        System.out.println(names);
        System.out.println(maps);
    }
}

结果:

 3.distinct去重

public class Stream_Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("AAA");
        list.add("AAA");
        list.add("BBB");
        list.add("BBB");
        list.add("CCC");
        List<String> strings = list.stream().distinct().collect(Collectors.toList());
        System.out.println(strings);
    }
}

结果:

4.groupingBy分组

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 23));
        list.add(new User("李四", "女", 25));
        list.add(new User("王五", "女", 32));
        list.add(new User("赵六", "男", 54));
        list.add(new User("田七", "男", 57));

        //根据性别分组
        Map<String, List<User>> sexMap = list.stream().collect(Collectors.groupingBy(User::getSex));
        sexMap.forEach((k, v) -> System.out.println(k + ":" + v));
    }
}

结果:

 5.skip跳过,limit截取,skip结合limit实现分页功能

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 23));
        list.add(new User("李四", "女", 25));
        list.add(new User("王五", "女", 32));
        list.add(new User("赵六", "男", 54));
        list.add(new User("田七", "男", 57));

        //skip跳过多少条
        List<User> skip = list.stream().skip(2).collect(Collectors.toList());
        //limit截取多少条
        List<User> limit = list.stream().limit(3).collect(Collectors.toList());
        //skip结合limit实现分页
        Integer pageIndex = 1;
        Integer pageSize = 2;
        List<User> page = list.stream().skip((pageIndex - 1) * pageSize)
                .limit(pageSize).collect(Collectors.toList());
        
        System.out.println("skip = " + skip);
        System.out.println("limit = " + limit);
        System.out.println("page = " + page);
    }
}

结果:

 6.sorted排序

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 33, 1));
        list.add(new User("李四", "女", 25, 2));
        list.add(new User("王五", "女", 32, 4));
        list.add(new User("赵六", "男", 54, 6));
        list.add(new User("田七", "男", 27, 34));
        list.add(new User("王信", "男", 27, 9));
        list.add(new User("黄三", "男", 27, 12));

        //按照年龄升序排序
        List<User> usersAsc = list.stream()
                .sorted(Comparator.comparing(User::getAge))
                .collect(Collectors.toList());
        usersAsc.forEach(user -> System.out.println(user));
        System.out.println("=====================");
        //按照年龄降序排序
        List<User> usersDesc = list.stream()
                .sorted(Comparator.comparing(User::getAge).reversed())
                .collect(Collectors.toList());
        usersDesc.forEach(user -> System.out.println(user));
        //按照年龄排序,再按照编号排序
        System.out.println("=====================");
        List<User> usersName = list.stream()
                .sorted(Comparator.comparing(User::getAge).thenComparing(User::getNumber))
                .collect(Collectors.toList());
        usersName.forEach(user -> System.out.println(user));
    }
}

7.max、min 获取最大值、最小值

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 33, 1));
        list.add(new User("李四", "女", 25, 2));
        list.add(new User("王五", "女", 32, 4));
        list.add(new User("赵六", "男", 54, 6));
        list.add(new User("田七", "男", 27, 34));
        list.add(new User("王信", "男", 27, 9));
        list.add(new User("黄三", "男", 27, 12));

        //年龄最大的
        User max = list.stream().max(Comparator.comparing(User::getAge)).get();
        //年龄最小的
        User min = list.stream().min(Comparator.comparing(User::getAge)).get();
        System.out.println("max = " + max);
        System.out.println("min = " + min);
    }
}

 结果:

 8.List转Map

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 33, 1));
        list.add(new User("李四", "女", 25, 2));
        list.add(new User("王五", "女", 32, 4));
        list.add(new User("赵六", "男", 54, 6));
        list.add(new User("田七", "男", 27, 34));
        list.add(new User("王信", "男", 27, 9));
        list.add(new User("黄三", "男", 27, 12));

        //key为name,value为User对象
        Map<String, User> map = list.stream().collect(Collectors.toMap(User::getName, User -> User));
        //key为name,value为Number对象
        Map<String, Integer> nameNumber = list.stream().collect(Collectors.toMap(User::getName, User::getNumber));

        map.forEach((k, v) -> System.out.println(k + ":" + v));
        nameNumber.forEach((k, v) -> System.out.println(k + ":" + v));
    }
}

结果:

 8.peek

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 33, 1));
        list.add(new User("李四", "女", 25, 2));
        list.add(new User("王五", "女", 32, 4));
        list.add(new User("赵六", "男", 54, 6));
        list.add(new User("田七", "男", 27, 34));
        list.add(new User("王信", "男", 27, 9));
        list.add(new User("黄三", "男", 27, 12));

        //在流执行的过程中看到第一次filter的结果
        List<User> collect = list.stream()
                .filter(u -> u.getSex().equals("女"))
                .peek(u -> System.out.println("第一次filter的结果:" + u.getName()))
                .filter(u -> u.getName().equals("王五")).collect(Collectors.toList());

        collect.forEach(u -> System.out.println(u));
    }
}

结果:

9.mapToInt、mapToDouble、mapToLong求和

 

public class Stream_Demo {
    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("张三", "男", 33, 1));
        list.add(new User("李四", "女", 25, 2));
        list.add(new User("王五", "女", 32, 4));
        list.add(new User("赵六", "男", 54, 6));
        list.add(new User("田七", "男", 27, 34));
        list.add(new User("王信", "男", 27, 9));
        list.add(new User("黄三", "男", 27, 12));

        //求和,平均值
        int int_sum = list.stream().mapToInt(User::getAge).sum();
        double double_sum = list.stream().mapToDouble(User::getAge).sum();
        long float_sum = list.stream().mapToLong(User::getNumber).sum();
        double avg = list.stream().mapToInt(User::getNumber).average().orElse(0);
        System.out.println(int_sum);
        System.out.println(double_sum);
        System.out.println(float_sum);
        System.out.println(avg);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值