您的位置:

JDK8新特性

一、Lambda表达式

Java 8中引入了Lambda表达式,它是一种函数式编程思想的体现,可以让代码更加简洁、易懂。

Lambda表达式由参数列表、箭头符号和函数体组成,使用时只需调用接口的方法,而不需要像传统的写法一样,必须创建一个实现类。

List list = Arrays.asList("c", "b", "a");
// 常规写法
Collections.sort(list, new Comparator
   () {
    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }
});
// Lambda写法
Collections.sort(list, (a, b) -> a.compareTo(b));

   
  

二、函数式接口

Java 8中引入了函数式接口,它是一个只拥有一个抽象方法的接口。Lambda表达式可以针对函数式接口创建实例。

Java 8中新增了一些函数式接口,如Supplier、Consumer、Function等,可以避免我们频繁地写匿名类,提高代码可读性。

// Supplier返回一个结果
Supplier supplier = () -> 1;
System.out.println("Supplier:" + supplier.get());

// Consumer接受一个参数,无返回值
Consumer
    consumer = (t) -> System.out.println("Consumer:" + t);
consumer.accept(1);

// Function接受一个参数,返回一个结果
Function
     function = (t) -> "Function:" + t;
System.out.println(function.apply(1));

    
   
  

三、Stream API

Java 8中新增了Stream API,可以轻松地对集合进行过滤、排序、查询等操作,大大提高了生产力。

Stream API可以通过一系列的中间操作和一个终止操作来操作集合,而且支持并行操作。它把要处理的元素集合看作一种流,流上的操作可以顺序执行也可以并行执行。

List list = Arrays.asList("c", "b", "a");
// 过滤
list.stream().filter(s -> s.startsWith("b")).forEach(System.out::println);
// 排序
list.stream().sorted().forEach(System.out::println);
// 映射
list.stream().map(String::toUpperCase).forEach(System.out::println);

  

四、默认方法

Java 8中引入了默认方法,可以在接口中定义具体实现,而不需要所有实现类都去实现该方法,提高了接口的灵活性。

默认方法的关键字是default,它的实现放在接口的内部。

public interface MyInterface {
    void sayHello();

    default void sayWorld() {
        System.out.println("world");
    }
}

public class MyClass implements MyInterface {
    @Override
    public void sayHello() {
        System.out.println("hello");
    }
}

MyClass myClass = new MyClass();
myClass.sayHello();  // hello
myClass.sayWorld();  // world

五、日期时间API

Java 8中引入了新的日期时间API,可以更加方便地实现日期时间的处理。

新的日期时间API避免了旧API中的很多问题,如月份从0开始、线程安全等,同时也包含了很多新的功能,如ZoneDateTime等。

// 获取当前时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间:" + currentTime);

// 格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedTime = currentTime.format(formatter);
System.out.println("格式化后时间:" + formattedTime);

// 增加或减少时间
LocalDateTime newTime = currentTime.plusYears(1).plusMonths(2).plusDays(5);
System.out.println("增加之后的时间:" + newTime);
以上就是JDK8中的一些新特性,它们提高了Java的生产力,让我们写出更加简洁、易懂的代码。