栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 8 新特性Stream&时间和日期

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 8 新特性Stream&时间和日期

聚合函数: Max
  Optional maxAge = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)).collect(Collectors.maxBy((a1, a2) -> a1.getAge() - a2.getAge()));
        System.out.println("最大年龄"+maxAge.get());

输出:最大年龄DemoTest(name=黑柳, age=43)

Min
 Optional minAge = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)).collect(Collectors.minBy((a1,a2)->a1.getAge()- a2.getAge()));
        System.out.println("最小年龄"+ minAge.get());

 输出:最小年龄DemoTest(name=张三, age=12)

Sum
 Integer sum = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)).collect(Collectors.summingInt(s -> s.getAge()));
        System.out.println("年龄总和:"+sum);

输出:年龄总和:115

avg
val ave = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)).collect(Collectors.averagingInt(s -> s.getAge()));
        System.out.println("平均值:"+ave);

输出:平均值:23.0

总数
        Long cound = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)
        ).filter(s->s.getAge()>13).collect(Collectors.counting());
        System.out.println("数量:"+cound);

输出:年龄大于13数量:3

GroupBy分组
 Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32))
                        .collect(Collectors.groupingBy(DemoTest::getName))
                        .forEach((k,v)-> System.out.println("k:"+k+"v:"+v));

输出:

k:黑柳v:[DemoTest(name=黑柳, age=43)]
k:李四v:[DemoTest(name=李四, age=13)]
k:张三v:[DemoTest(name=张三, age=12)]
k:王五v:[DemoTest(name=王五, age=15)]
k:白七v:[DemoTest(name=白七, age=32)]

按照成年未成年分组 
  final Map> collect = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 13)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32))
                .collect(Collectors.groupingBy(s -> s.getAge() > 18 ? "成年" : "未成年"));
        collect.forEach((k,v)-> System.out.println("k:"+k +"v:"+v));

输出:
k:未成年v:[DemoTest(name=张三, age=12), DemoTest(name=李四, age=13), DemoTest(name=王五, age=15)]
k:成年v:[DemoTest(name=黑柳, age=43), DemoTest(name=白七, age=32)]

多级分组

先name 后age 

 final val collect1 = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 18)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)
                , new DemoTest("李四", 17))
                .collect(Collectors.groupingBy(
                        DemoTest::getName, Collectors
                                .groupingBy(
                                        DemoTest
                                                -> DemoTest.getAge()
                                                   >= 18 ? "成年" : "未成年")));
        collect1.forEach((k,v)-> System.out.println("k:"+k+"v:"+v));

    

 输出:       

k:黑柳v:{成年=[DemoTest(name=黑柳, age=43)]}
k:李四v:{未成年=[DemoTest(name=李四, age=17)], 成年=[DemoTest(name=李四, age=18)]}
k:张三v:{未成年=[DemoTest(name=张三, age=12)]}
k:王五v:{未成年=[DemoTest(name=王五, age=15)]}
k:白七v:{成年=[DemoTest(name=白七, age=32)]}

分区操作 false true
    @Test
    void demo06(){
        final val map = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 18)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)
                , new DemoTest("李四", 17))
                .collect(Collectors.partitioningBy(s -> s.getAge() >= 18));
        map.forEach((k,v)-> System.out.println("k:"+k+"t"+"v:"+v));
    }

k:false    v:[DemoTest(name=张三, age=12), DemoTest(name=王五, age=15), DemoTest(name=李四, age=17)]
k:true    v:[DemoTest(name=李四, age=18), DemoTest(name=黑柳, age=43), DemoTest(name=白七, age=32)]

拼接 joining
 void demo07(){

        final String collect = Stream.of(new DemoTest("张三", 12)
                , new DemoTest("李四", 18)
                , new DemoTest("王五", 15)
                , new DemoTest("黑柳", 43)
                , new DemoTest("白七", 32)
                , new DemoTest("李四", 17))
                .map(DemoTest::getName).collect(Collectors.joining("_"));

 输出:张三_李四_王五_黑柳_白七_李四

时间和日期  date

使用久版想打印制定日期,显示的不是自己想要的

  Date date=new Date(2001,8,8);
        System.out.println(date);

输出:Sun Sep 08 00:00:00 CST 3901

localdate 日期

使用java8 中的 localdate方法 可以是自己打印出自己想要的日期

  final LocalDate of = LocalDate.of(2001, 8, 8);
        System.out.println(of);

 打印:2001-08-08

localdate打印当前日期
  final LocalDate date1 = LocalDate.now();
        System.out.println("打印当前时间:"+date1);
        System.out.println("年:"+date1.getYear());
        System.out.println("日:"+date1.getDayOfMonth());
        
        System.out.println("星期:"+date1.getDayOfWeek().getValue());
        System.out.println("月:"+date1.getMonth().getValue());

localTime 时间 
  final LocalTime now = LocalTime.now();
        System.out.println(now);

 

localDateTime 日期时间 
  final LocalTime now = LocalTime.now();
        System.out.println(now);

 

 

日期时间指定格式
   final LocalDateTime now1 = LocalDateTime.now();//创建当前时间
  final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//创建指定格式
        final String format = now1.format(dateTimeFormatter);//格式嵌入
        System.out.println(format);

打印:2022-05-15 09:54:14

计算时间差 Duration 日期差 Period
 @Test
    void demoBetween(){
        //创建当前时间
        final val dateTime = LocalTime.now();
        //指定时间
        final LocalTime time = LocalTime.of(10, 5);
        final Duration between = Duration.between(dateTime, time);
        System.out.println(between);
    }
}

还可以查 

 

 

打印:PT-28.788S

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888368.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号