Java 8 新特性简单介绍

Java 8 新特性简单介绍:

  Lambda 表达式:允许将函数作为一个方法的参数(函数作为参数传递进来),函数主体用 -> 关联起来:例如:x -> System.out.println(x)

  方法引用:简单来说就是通过方法的名字引用一个方法(使用 :: 的形式),例如:System.out::println。参数传递的逻辑通过程序上下文推断传入

  函数式接口:函数式接口有且仅有一个抽象的方法,但还可以继承多个有非抽象方法的接口。可以通过一个 Lambda 表达式的方式实现一个接口式函数,

    例如: 

Predicate <T> 函数式接口的使用:

    public static void eval(List<Integer> list, Predicate<Integer> predicate) {
          for(Integer n: list) {
             if(predicate.test(n)) {
                System.out.println(n + " ");
             }
          }
    }

    // 调用
    eval(list, n -> n > 3);

  可以通过具体参考:https://www.runoob.com/java/java8-functional-interfaces.html

  默认方法:Java 8 新增了接口的默认方法,简单来说就是接口可以有实现方法,而不需要实现类再去实现其方法。目的主要是为了解决:接口的修改与现有的实现不兼容问题。例如:  

public interface demo01 {
    default void print1() {
        System.out.println("test default method...");
    }

    // Java 8 还有一个新特性:接口可以声明(并给出实现)静态方法
    static void print2() {
        System.out.println("test static method...");
    }
}

  Stream 流:Java 8 提供了一个新的抽象 Stream 流,可以让你用声明的方式去处理数据。这种风格将要处理的元素看作一种流,流在管道中传输,我们可以在管道的一些节点位置对流进行处理,例如:筛选、排序、聚合等。

package testJava8;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class testStream {
    public static void main(String[] args) {
        List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
        // 测试流的使用
        List<Integer> collect = integerList.stream()
                .map(i -> i * i)
                .sorted((x, y) -> y - x)
                .collect(Collectors.toList());
        collect.forEach(System.out::println);

        List<String> stringList = Arrays.asList("a", "b", "c", "d", "e");
        Map<Integer, String> map = stringList.stream()
                .collect(Collectors.toMap(str -> stringList.indexOf(str), str -> str));
        map.forEach((key, value) -> System.out.println(key +":"+ value));
    }
}

  具体参考:https://www.runoob.com/java/java8-streams.html

  Optinal 类:可以理解为是一个存放 <T> 类型的容器,也可以存储 null 属性,主要解决了空指针异常问题。

package testJava8;

import java.util.Optional;

public class testOptional {
    public static void main(String[] args) {
        // 可以传入一个 null 不报 NullPointerException 错
        Optional<Integer> integerOptional = Optional.ofNullable(null);
        // Optional.empty
        System.out.println(integerOptional);
    }
}

  具体参考:https://www.runoob.com/java/java8-optional-class.html 

  日期格式API:Java 8 提供了新的本地化日期时间 API:LocalDate、LocalTime、LocalDateTime这三种日期形式。也提供了新的 DateTimeFormatter 格式转换。

  例如:

package testJava8;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class testNewDate {
    public static void main(String[] args) {
        LocalDate nowDate = LocalDate.now();
        LocalTime nowTime = LocalTime.now();
        LocalDateTime nowDateTime = LocalDateTime.now();
        // 2021-03-29
        System.out.println(nowDate);
        // 15:59:55.599
        System.out.println(nowTime);
        // 2021-03-29T15:59:55.600
        System.out.println(nowDateTime);

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        // 2021/03/29 16:04:53
        System.out.println(dtf.format(nowDateTime));

        // 传入 String 类型的时间与指定的转换格式相对应时期转换为 LocalDatetime 类型
        LocalDateTime parseDateTime = LocalDateTime.parse("2021/03/29 16:04:53", dtf);
        // 2021/03/29 16:04:53
        System.out.println(parseDateTime);
    }
}

  具体参考:https://www.liaoxuefeng.com/wiki/1252599548343744/1303871087444002

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值