Stream流练习

1、 现有一个Student类的List集合,统计:按时间从大到小排序,取前五个,统计这前五个男生和女生的数量各是多少?

Date排序的常见方法:

方法1:

boolean after(Date when) 测试此日期是否在指定日期之后。
boolean before(Date when) 测试此日期是否在指定日期之前。

方法2:

int compareTo(Date anotherDate) 比较两个日期的顺序。
compareto比较:return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));

  List<Student> list = new ArrayList<>();
        list.add(new Student(19, "女", "s1", new Date(1000000)));
        list.add(new Student(24, "男", "s2", new Date(2000000)));
        list.add(new Student(25, "男", "s3", new Date(3000000)));
        list.add(new Student(26, "女", "s4", new Date(4000000)));
        list.add(new Student(40, "男", "s5", new Date(5000000)));
        list.add(new Student(29, "女", "s6", new Date(6000000)));
        list.add(new Student(34, "男", "s7", new Date(7000000)));
        list.add(new Student(22, "女", "s8", new Date(8000000)));
        list.add(new Student(24, "女", "s9", new Date(9000000)));
        list.add(new Student(20, "女", "s0", new Date(100000)));
//      s1 =Student{name='s2', date=Thu Jan 01 08:33:20 CST 1970}===s2 =Student{name='s1', date=Thu Jan 01 08:16:40 CST 1970}
//      s1 =Student{name='s3', date=Thu Jan 01 08:50:00 CST 1970}===s2 =Student{name='s2', date=Thu Jan 01 08:33:20 CST 1970}
        Stream<Student> stream = list.stream();
        //进行排序,取前五个,统计这前五个男生和女生的数量各是多少
        List<Student> newList = stream.sorted((s1, s2) -> {
            System.out.println("s1 =" + s1+"====== s2 ="+ s2);
            return s1.getDate().compareTo(s2.getDate()); //这里的s1是代表this,也代表后一个元素,s2代表another,也代表前一个元素
        }).collect(Collectors.toList());
        printf(newList);//打印结果按照时间从大(时间越久)到小进行排序
        // 取排序后,前五个,进行分类统计
        Map<String,Long> map = newList.stream().limit(5).collect(Collectors.groupingBy(Student::getSex, Collectors.counting()));
        Set<Map.Entry<String, Long>> s = map.entrySet();
        for (Map.Entry<String, Long> strings : s) {
            System.out.println(strings.getValue()+"="+strings.getKey());
        }
    }

2 、Student类的List集合,按照性别分类返回年龄集合。返回Map<String,List<String>>而不是Map<String,List<Student>>

List<Student> list = new ArrayList<>();
List<String,List<String> = list.stream().collect(Collectors.groupingBy(Student::getSex,Collectors.mapping(Student::getAge,Collectors.toList())));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值