Java อินเตอร์เฟซ 8 ฟังก์ชั่น
อินเตอร์เฟซฟังก์ชั่น (Functional อินเตอร์เฟซ) เป็นวิธีการของการมีอินเตอร์เฟซที่ร่วมกัน
อินเตอร์เฟซที่ฟังก์ชั่นที่สามารถแปลงโดยปริยายที่จะแสดงออกแลมบ์ดา
อินเตอร์เฟซที่ฟังก์ชั่นสามารถรองรับฟังก์ชั่นที่มีอยู่แลมบ์ดามิตร
ก่อน JDK 1.8 มีอินเตอร์เฟซฟังก์ชั่น:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
JDK 1.8 ใหม่เพิ่มฟังก์ชั่นอินเตอร์เฟซ:
- java.util.function
java.util.function มันมีชั้นเรียนหลายฟังก์ชั่นเพื่อสนับสนุนการเขียนโปรแกรม Java, แพคเกจการทำงานของอินเตอร์เฟซนี้:
เลขที่ | อินเตอร์เฟซและคำอธิบาย |
---|---|
1 | BiConsumer <T, U> เพราะมันหมายถึงการดำเนินงานที่จะป้อนพารามิเตอร์สองและไม่พบผลลัพธ์ใด ๆ |
2 | BiFunction <T, U, R> เพราะมันหมายถึงวิธีการที่ยอมรับป้อนพารามิเตอร์สองและผลตอบแทน |
3 | BinaryOperator <T> ทำหน้าที่ในนามของผู้ประกอบการในสองชนิดเดียวกันของการดำเนินงานและผู้ประกอบการส่งกลับชนิดเดียวกันของผล |
4 | BiPredicate <T, U> เพราะมันหมายถึงแบบบูลวิธีมูลค่าสองพารามิเตอร์ |
5 | BooleanSupplier มันหมายถึงค่าบูลีนผลของผู้ให้บริการ |
6 | ผู้บริโภค <T> หมายถึงการยอมรับพารามิเตอร์สำหรับการป้อนและไม่มีการดำเนินการกลับมา |
7 | DoubleBinaryOperator มันจะทำหน้าที่ในนามของผู้ประกอบการดำเนินงานค่าคู่สองและผลตอบแทนผลของค่าคู่ |
8 | DoubleConsumer ยอมรับการดำเนินการในนามของค่า double ของพารามิเตอร์และไม่กลับผล |
9 | DoubleFunction <R> การยอมรับในนามของพารามิเตอร์วิธีคู่และผลตอบแทน |
10 | DoublePredicate เพราะมันหมายถึงค่าบูลีนของพารามิเตอร์มีวิธีค่า double |
11 | DoubleSupplier คุ้มค่าหมายถึงผู้ให้บริการโครงสร้างคู่ |
12 | DoubleToIntFunction ยอมรับการป้อนข้อมูลประเภทคู่และส่งกลับผล int |
13 | DoubleToLongFunction ยอมรับการป้อนข้อมูลประเภทคู่และส่งกลับชนิดยาวของผล |
14 | DoubleUnaryOperator รับพารามิเตอร์สำหรับประเภทเดียวกันของคู่ชนิดกลับยังเป็นคู่ |
15 | ฟังก์ชั่น <T, R> รับพารามิเตอร์การป้อนข้อมูลและผลตอบแทน |
16 | IntBinaryOperator รับสองพารามิเตอร์กับ int ชนิดเดียวกันประเภทค่าตอบแทนยังเป็น int |
17 | IntConsumer ยอมรับป้อนพารามิเตอร์ int ไม่มีค่าตอบแทน |
18 | IntFunction <R> ยอมรับพารามิเตอร์สำหรับการป้อนชนิด int และผลตอบแทน |
19 | IntPredicate : ยอมรับพารามิเตอร์การป้อนข้อมูล int และส่งกลับค่าบูลีนผล |
20 | IntSupplier ไม่มีข้อโต้แย้งและส่งกลับผล int |
21 | IntToDoubleFunction รับข้อมูลชนิด int และผลตอบแทนที่เป็นผลมาจากประเภทคู่ |
22 | IntToLongFunction รับข้อมูลชนิด int และส่งกลับชนิดยาวของผล |
23 | IntUnaryOperator รับพารามิเตอร์สำหรับ int ชนิดเดียวกันประเภทค่าตอบแทนยังเป็น int |
24 | LongBinaryOperator มันรับสองตัวแปรที่มีชนิดเดียวกันยาวส่งกลับชนิดเป็นเวลานาน |
25 | LongConsumer มันต้องใช้เวลาชนิดยาวของพารามิเตอร์การป้อนข้อมูลที่ไม่มีค่าตอบแทน |
26 | LongFunction <R> ที่จะยอมรับชนิดยาวของพารามิเตอร์การป้อนข้อมูลและผลตอบแทน |
27 | LongPredicate R ใช้พารามิเตอร์สำหรับการป้อนยาวและผลตอบแทนผลประเภทค่าบูลีน |
28 | LongSupplier ไม่มีค่าพารามิเตอร์และส่งกลับค่าผลของชนิดยาว |
29 | LongToDoubleFunction ที่จะยอมรับชนิดยาวเข้าและผลตอบแทนที่เป็นผลมาจากประเภทคู่ |
30 | LongToIntFunction ที่จะยอมรับชนิดยาวเข้าและส่งกลับผล int |
วันที่ 31 | LongUnaryOperator มันรับพารามิเตอร์สำหรับประเภทเดียวกันของนานกลับมาชนิดเป็นเวลานาน |
32 | ObjDoubleConsumer <T> ยอมรับชนิดของวัตถุและประเภทคู่ป้อนพารามิเตอร์ค่าส่งกลับไม่มี |
33 | ObjIntConsumer <T> ยอมรับชนิดของวัตถุและป้อนพารามิเตอร์ int ไม่มีค่าตอบแทน |
34 | ObjLongConsumer <T> ยอมรับชนิดของวัตถุและชนิดยาวของพารามิเตอร์การป้อนค่าส่งกลับไม่มี |
35 | กริยา <T> รับพารามิเตอร์การป้อนข้อมูลและส่งกลับผลบูลีน |
36 | ซัพพลายเออร์ <T> ไม่มีค่าพารามิเตอร์และผลตอบแทน |
37 | ToDoubleBiFunction <T, U> มันรับป้อนพารามิเตอร์ที่สองและผลตอบแทนที่เป็นผลมาจากประเภทคู่ |
38 | ToDoubleFunction <T> รับพารามิเตอร์การป้อนข้อมูลและส่งกลับผลมาจากประเภทคู่ |
39 | ToIntBiFunction <T, U> มันรับป้อนพารามิเตอร์ที่สองและผลตอบแทนที่เป็นผลมาจากชนิด int |
40 | ToIntFunction <T> รับพารามิเตอร์การป้อนข้อมูลและส่งกลับผลมาจากชนิด int |
41 | ToLongBiFunction <T, U> มันรับป้อนพารามิเตอร์สองและผลตอบแทนชนิดยาวของผล |
42 | ToLongFunction <T> รับพารามิเตอร์การป้อนข้อมูลและผลตอบแทนชนิดยาวของผล |
43 | UnaryOperator <T> ยอมรับพารามิเตอร์ของ T ประเภทประเภทของค่าตอบแทนสำหรับที |
อินสแตนซ์อินเตอร์เฟซที่ใช้งานได้
กริยา <T> อินเตอร์เฟซที่เป็นอินเตอร์เฟซการทำงานที่ยอมรับพารามิเตอร์สำหรับการป้อน T, ส่งกลับผลบูลีน
อินเตอร์เฟซที่มีวิธีการเริ่มต้นหลายจะรวมกันเป็นคำกริยาตรรกะที่ซับซ้อนอื่น ๆ (เช่น AND, OR, NOT)
อินเตอร์เฟซนี้จะใช้ในการทดสอบวัตถุเป็นจริงหรือเท็จ
เราสามารถจากตัวอย่างต่อไปนี้ (Java8Tester.java) เพื่อทำความเข้าใจการทำงานของอินเตอร์เฟซกริยา <T> ใช้:
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Java8Tester { public static void main(String args[]){ List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicate<Integer> predicate = n -> true // n 是一个参数传递到 Predicate 接口的 test 方法 // n 如果存在则 test 方法返回 true System.out.println("输出所有数据:"); // 传递参数 n eval(list, n->true); // Predicate<Integer> predicate1 = n -> n%2 == 0 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n%2 为 0 test 方法返回 true System.out.println("输出所有偶数:"); eval(list, n-> n%2 == 0 ); // Predicate<Integer> predicate2 = n -> n > 3 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n 大于 3 test 方法返回 true System.out.println("输出大于 3 的所有数字:"); eval(list, n-> n > 3 ); } public static void eval(List<Integer> list, Predicate<Integer> predicate) { for(Integer n: list) { if(predicate.test(n)) { System.out.println(n + " "); } } } }
การดำเนินงานของสคริปดังกล่าวข้างต้นออกเป็น:
$ javac Java8Tester.java $ java Java8Tester 输出所有数据: 1 2 3 4 5 6 7 8 9 输出所有偶数: 2 4 6 8 输出大于 3 的所有数字: 4 5 6 7 8 9