java8新特性

Lambda表达式和函数式接口

  • 最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:
 Arrays.asList( "a", "b", "d" ).forEach( e -> {
            System.out.print( e );
            System.out.print( e );
        } );
  • Lambda表达式可以引用类成员和局部变量(会将这些变量隐式得转换成final的)
  • 函数接口指的是只有一个函数的接口,这样的接口可以隐式转换为Lambda表达式。java.lang.Runnable和java.util.concurrent.Callable是函数式接口的最佳例子。

接口的默认方法和静态方法

  • 默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。

Java官方库的新特性

Optional

Streams

Date/Time API(JSR 310)

  • Clock类使用时区来返回当前的纳秒时间和日期.Clock可以替代System.currentTimeMillis()。
        final Clock clock =  Clock.systemUTC();
        System.out.println(clock.millis());
        System.out.println(System.currentTimeMillis());

结果:

1513579690382
1513579690382
  • LocalDate仅仅包含ISO-8601日历系统中的日期部分;LocalTime则仅仅包含该日历系统中的时间部分。
        final Clock clock =  Clock.systemUTC();

        final LocalDate date = LocalDate.now();
        final LocalDate date1 = LocalDate.now(clock);//UTC
        System.out.println(date);
        System.out.println(date1);

        final LocalTime time = LocalTime.now();
        final LocalTime time1 = LocalTime.now(clock);//UTC
        System.out.println(time);
        System.out.println(time1);

结果:

2017-12-18
2017-12-18
14:59:56.625
06:59:56.625
  • LocalDateTime类包含了LocalDate和LocalTime的信息,但是不包含ISO-8601日历系统中的时区信息。
        final LocalDateTime datetime = LocalDateTime.now();
        System.out.println(datetime);

        final LocalDateTime datetime1 = LocalDateTime.now(clock);//UTC
        System.out.println(datetime1);

结果:

2017-12-18T15:04:08.986
2017-12-18T07:04:08.986
  • 如果你需要特定时区的data/time信息,则可以使用ZoneDateTime,它保存有ISO-8601日期系统的日期和时间,而且有时区信息。
        final ZonedDateTime zonedDatetime = ZonedDateTime.now();
        final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock );
        final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) );

        System.out.println( zonedDatetime );
        System.out.println( zonedDatetimeFromClock );
        System.out.println( zonedDatetimeFromZone );

结果:

2017-12-18T15:05:41.059+08:00[Asia/Shanghai]
2017-12-18T07:05:41.059Z
2017-12-17T23:05:41.062-08:00[America/Los_Angeles]
  • Duration类,它持有的时间精确到秒和纳秒。这使得我们可以很容易得计算两个日期之间的不同
        final LocalDateTime from = LocalDateTime.of( 2014, Month.APRIL, 16, 0, 0, 0 );
        final LocalDateTime to = LocalDateTime.of( 2015, Month.APRIL, 16, 23, 59, 59 );

        final Duration duration = Duration.between( from, to );
        System.out.println( "Duration in days: " + duration.toDays() );
        System.out.println( "Duration in hours: " + duration.toHours() );

结果

Duration in days: 0
Duration in hours: 23

Base64编码

  • 对Base64编码的支持已经被加入到Java8官方库中,这样不需要使用第三方库就可以进行Base64编码
        final String text = "Base64 finally in Java 8!";

        final String encoded = Base64
                .getEncoder()
                .encodeToString( text.getBytes( StandardCharsets.UTF_8 ) );
        System.out.println( encoded );

        final String decoded = new String(
                Base64.getDecoder().decode( encoded ),
                StandardCharsets.UTF_8 );
        System.out.println( decoded );

结果:

QmFzZTY0IGZpbmFsbHkgaW4gSmF2YSA4IQ==
Base64 finally in Java 8!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值