一、Lambda表达式
Java 8中引入了Lambda表达式,它是一种函数式编程思想的体现,可以让代码更加简洁、易懂。
Lambda表达式由参数列表、箭头符号和函数体组成,使用时只需调用接口的方法,而不需要像传统的写法一样,必须创建一个实现类。
Listlist = 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返回一个结果 Suppliersupplier = () -> 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可以通过一系列的中间操作和一个终止操作来操作集合,而且支持并行操作。它把要处理的元素集合看作一种流,流上的操作可以顺序执行也可以并行执行。
Listlist = 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的生产力,让我们写出更加简洁、易懂的代码。