• 取多条数据相同用户时间最小的那条数据


        public static void main(String[] args) {
            List<User> list = new ArrayList<User>();
            list = Arrays.asList(
                    new User("小强", 11, "男", "2022-10-10"),
                    new User("小玲", 15, "女", "2022-10-10"),
                    new User("小虎", 23, "男", "2022-10-10"),
                    new User("小雨", 26, "女", "2022-10-08"),
                    new User("小飞", 19, "男", "2022-10-14"),
    
                    new User("小雨", 26, "女", "2022-10-10"),
                    new User("小强", 15, "女大", "2022-10-12"),
                    new User("小玲", 16, "女大", "2022-10-12"),
                    new User("小虎", 25, "男大", "2022-10-12"),
                    new User("小雨", 28, "女大", "2022-10-12")
            );
    //        List collect = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
    //                Comparator.comparing(worth -> worth.getName()))), ArrayList::new));
    //        System.out.println("collect = " + collect);
    //
    //        User user = list.stream().min(Comparator.comparing(User::getAge)).get();
    //        System.out.println("user = " + user);
    //        System.out.println("collect = " + collect);
    //
    
            // 步骤一:将数据进行分组
            Map<String, List<User>> name = list.stream().collect(Collectors.groupingBy(e -> e.getName()));
            // 步骤二:获取分组中最近日期数据,然后汇总到List中 collect(Collectors.toList());
            List<User> time1 = name.values().stream().map(maps -> {
                Optional<User> time = maps.stream().min(Comparator.comparing(ee -> DateUtil.parse(ee.getBirthday(), "yyyy-MM-dd")));
                // 这句的意思是如果time有值就返回,如果没值就返回null
                return time.orElse(null);
            }).collect(Collectors.toList());
            System.out.println("time1 = " + time1);
    
            List<User> time2 = name.values().stream().map(maps -> {
                Optional<User> time = maps.stream().min(Comparator.comparing(ee -> DateUtils.getMillis(DateUtil.parse(ee.getBirthday(), "yyyy-MM-dd"))));
                // 这句的意思是如果time有值就返回,如果没值就返回null
                return time.orElse(null);
            }).collect(Collectors.toList());
            System.out.println("time2 = " + time2);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 相关阅读:
    MyBatis 常见面试题
    EventBus 一篇文章就够了
    dockerfile的优化和本地私有仓库的搭建
    面试之Java String 编码相关
    Hadoop笔记-01概述
    Redis系列:Geo 类型赋能亿级地图位置计算
    进阶C++__STL__容器vector使用方法【简单易懂】
    SpringCloudAlibaba-微服务-Nacos服务配置
    C++中set/multiset容器(黑马程序员)
    1688获得搜索词推荐 API分享(item_search_suggest)
  • 原文地址:https://blog.csdn.net/weixin_44458365/article/details/126720805