1. Java8的概述
Java8是Java语言的一个重要版本,该版本于2014年3月发布,是自Java5以来最具革命性的版本,
这个版本包含语言、编译器、库、工具和JVM等方面的十多个新特性
2. 函数式接口
<1>函数式接口:指,只包含一个抽象方法的接口,如:java.lang.Runnable、java.util.Comparator接口等
<2>Java8提供@FunctionalInterface注解,来定义(强调)函数式接口。
若定义的接口不符合函数式规范,便会报错。
<3>Java8中,增加了java.util.function包,该包包含了常用的函数式接口,具体如下:
接口名称 | 方法声明 | 功能介绍 |
Consumer | void accept(T t) | 根据指定的参数,执行操作 |
Supplier | T get() | 得到一个返回值 |
Function<T,R> | R apply(T t) | 根据指定的参数,执行操作并返回 |
Predicate | boolean test(T t) | 判断指定的参数,是否满足条件 |
3 import java.util.Comparator;
4 import java.util.function.Consumer;
5 import java.util.function.Function;
6 import java.util.function.Predicate;
7 import java.util.function.Supplier;
8
9 public class FunctionalInterfaceTest {
10
11 public static void main(String[] args) {
12
13 // 1.匿名内部类的语法格式: 父类/接口类型 引用变量名 = new 父类/接口类型(){ 方法的重写 };
14 Runnable runnable = new Runnable() {
15 @Override
16 public void run() {
17 System.out.println("我是既没有参数又没有返回值的方法!");
18 }
19 };
20 runnable.run(); // 我是既没有参数又没有返回值的方法!
21
26
27 System.out.println("----------------------------------------------------------------------");
28 Consumer consumer = new Consumer() {
29 @Override
30 public void accept(Object o) {
31 System.out.println(o + "有参但没有返回值的方法就是我!");
32 }
33 };
34 consumer.accept("友情提示:"); // 友情提示:有参但没有返回值的方法就是我!
41
42 System.out.println("----------------------------------------------------------------------");
43 Supplier supplier = new Supplier() {
44 @Override
45 public Object get() {
46 return "无参有返回值!";
47 }
48 };
49 System.out.println(supplier.get()); // 无参有返回值
50
55 System.out.println("----------------------------------------------------------------------");
56 Function function = new Function() {
57 @Override
58 public Object apply(Object o) {
59 return o;
60 }
61 };
62 System.out.println(function.apply("有参有返回值的方法")); // 有参有返回值的方法
63
67
68 System.out.println("----------------------------------------------------------------------");
69 Comparator comparator = new Comparator() {
70 @Override
71 public int compare(Object o1, Object o2) {
72 return 0;
73 }
74 };
75 System.out.println(comparator.compare(10, 20)); // 0 (传两个参数,得到一个返回值的方法)
76
80 System.out.println("----------------------------------------------------------------------");
81 Predicate predicate = new Predicate() {
82 @Override
83 public boolean test(Object o) {
84 return false;
85 }
86 };
87 System.out.println(predicate.test("hello")); // false (传一个参数,得到 true/false 的方法)
91 }
92 }