JavaSE:Java8 新特性

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.  匿名内部类实现函数式接口

    测试类

 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 }
原文地址:https://www.cnblogs.com/JasperZhao/p/14945037.html