Java 8 - Giao diện chức năng
Các giao diện chức năng có một chức năng duy nhất để trưng bày. Ví dụ: giao diện So sánh với một phương thức duy nhất 'CompareTo' được sử dụng cho mục đích so sánh. Java 8 đã định nghĩa rất nhiều giao diện chức năng được sử dụng rộng rãi trong các biểu thức lambda. Sau đây là danh sách các giao diện chức năng được định nghĩa trong gói java.util.Function.
Sr.No. | Giao diện & Mô tả |
---|---|
1 | BiConsumer<T,U> Biểu diễn một phép toán chấp nhận hai đối số đầu vào và không trả về kết quả nào. |
2 | BiFunction<T,U,R> Biểu diễn một hàm chấp nhận hai đối số và tạo ra một kết quả. |
3 | BinaryOperator<T> Biểu diễn một phép toán dựa trên hai toán hạng cùng kiểu, tạo ra kết quả cùng kiểu với toán hạng. |
4 | BiPredicate<T,U> Biểu diễn một vị từ (hàm có giá trị Boolean) gồm hai đối số. |
5 | BooleanSupplier Đại diện cho một nhà cung cấp các kết quả có giá trị Boolean. |
6 | Consumer<T> Biểu diễn một thao tác chấp nhận một đối số đầu vào duy nhất và không trả về kết quả nào. |
7 | DoubleBinaryOperator Biểu diễn một phép toán dựa trên hai toán hạng có giá trị kép và tạo ra kết quả có giá trị kép. |
số 8 | DoubleConsumer Đại diện cho một phép toán chấp nhận một đối số có giá trị kép duy nhất và không trả về kết quả nào. |
9 | DoubleFunction<R> Biểu diễn một hàm chấp nhận một đối số có giá trị kép và tạo ra một kết quả. |
10 | DoublePredicate Biểu diễn một vị từ (hàm có giá trị Boolean) của một đối số có giá trị kép. |
11 | DoubleSupplier Đại diện cho một nhà cung cấp các kết quả có giá trị kép. |
12 | DoubleToIntFunction Biểu diễn một hàm chấp nhận đối số có giá trị kép và tạo ra kết quả có giá trị int. |
13 | DoubleToLongFunction Biểu diễn một hàm chấp nhận đối số có giá trị kép và tạo ra kết quả có giá trị dài. |
14 | DoubleUnaryOperator Biểu diễn một phép toán trên một toán hạng có giá trị kép duy nhất tạo ra kết quả có giá trị kép. |
15 | Function<T,R> Biểu diễn một hàm chấp nhận một đối số và tạo ra một kết quả. |
16 | IntBinaryOperator Biểu diễn một phép toán dựa trên hai toán hạng có giá trị int và tạo ra kết quả có giá trị int. |
17 | IntConsumer Biểu diễn một phép toán chấp nhận một đối số có giá trị int và không trả về kết quả nào. |
18 | IntFunction<R> Biểu diễn một hàm chấp nhận một đối số có giá trị int và tạo ra một kết quả. |
19 | IntPredicate Biểu diễn một vị từ (hàm có giá trị Boolean) của một đối số có giá trị int. |
20 | IntSupplier Đại diện cho một nhà cung cấp các kết quả có giá trị int. |
21 | IntToDoubleFunction Biểu diễn một hàm chấp nhận đối số có giá trị int và tạo ra kết quả có giá trị kép. |
22 | IntToLongFunction Biểu diễn một hàm chấp nhận đối số có giá trị int và tạo ra kết quả có giá trị dài. |
23 | IntUnaryOperator Biểu diễn một phép toán trên một toán hạng có giá trị int duy nhất tạo ra kết quả có giá trị int. |
24 | LongBinaryOperator Biểu diễn một phép toán dựa trên hai toán hạng có giá trị dài và tạo ra kết quả có giá trị dài. |
25 | LongConsumer Đại diện cho một phép toán chấp nhận một đối số có giá trị dài và không trả về kết quả nào. |
26 | LongFunction<R> Biểu diễn một hàm chấp nhận một đối số có giá trị dài và tạo ra một kết quả. |
27 | LongPredicate Đại diện cho một vị từ (hàm có giá trị Boolean) của một đối số có giá trị dài. |
28 | LongSupplier Đại diện cho nhà cung cấp các kết quả có giá trị lâu dài. |
29 | LongToDoubleFunction Biểu diễn một hàm chấp nhận đối số có giá trị dài và tạo ra kết quả có giá trị kép. |
30 | LongToIntFunction Biểu diễn một hàm chấp nhận đối số có giá trị dài và tạo ra kết quả có giá trị int. |
31 | LongUnaryOperator Biểu diễn một phép toán trên một toán hạng có giá trị dài duy nhất tạo ra kết quả có giá trị dài. |
32 | ObjDoubleConsumer<T> Đại diện cho một phép toán chấp nhận đối số có giá trị đối tượng và đối số có giá trị kép và không trả về kết quả nào. |
33 | ObjIntConsumer<T> Đại diện cho một phép toán chấp nhận một đối số có giá trị đối tượng và một đối số có giá trị int và không trả về kết quả nào. |
34 | ObjLongConsumer<T> Đại diện cho một phép toán chấp nhận một đối số có giá trị đối tượng và một đối số có giá trị dài và không trả về kết quả nào. |
35 | Predicate<T> Biểu diễn một vị từ (hàm có giá trị Boolean) của một đối số. |
36 | Supplier<T> Đại diện cho một nhà cung cấp kết quả. |
37 | ToDoubleBiFunction<T,U> Biểu diễn một hàm chấp nhận hai đối số và tạo ra một kết quả có giá trị kép. |
38 | ToDoubleFunction<T> Biểu diễn một hàm tạo ra kết quả có giá trị kép. |
39 | ToIntBiFunction<T,U> Biểu diễn một hàm chấp nhận hai đối số và tạo ra kết quả có giá trị int. |
40 | ToIntFunction<T> Biểu diễn một hàm tạo ra kết quả có giá trị int. |
41 | ToLongBiFunction<T,U> Biểu diễn một hàm chấp nhận hai đối số và tạo ra một kết quả có giá trị dài. |
42 | ToLongFunction<T> Biểu diễn một hàm tạo ra kết quả có giá trị dài. |
43 | UnaryOperator<T> Biểu diễn một phép toán trên một toán hạng duy nhất tạo ra kết quả cùng kiểu với toán hạng của nó. |
Ví dụ về giao diện chức năng
Giao diện Predicate <T> là một giao diện chức năng có kiểm tra phương thức (Đối tượng) để trả về giá trị Boolean. Giao diện này biểu thị rằng một đối tượng được kiểm tra là đúng hay sai.
Tạo chương trình Java sau bằng cách sử dụng bất kỳ trình soạn thảo nào bạn chọn trong C: \> JAVA.
Java8Tester.java
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 is passed as parameter to test method of Predicate interface
// test method will always return true no matter what value n has.
System.out.println("Print all numbers:");
//pass n as parameter
eval(list, n->true);
// Predicate<Integer> predicate1 = n -> n%2 == 0
// n is passed as parameter to test method of Predicate interface
// test method will return true if n%2 comes to be zero
System.out.println("Print even numbers:");
eval(list, n-> n%2 == 0 );
// Predicate<Integer> predicate2 = n -> n > 3
// n is passed as parameter to test method of Predicate interface
// test method will return true if n is greater than 3.
System.out.println("Print numbers greater than 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 + " ");
}
}
}
}
Ở đây chúng ta đã chuyển giao diện Predicate, giao diện này nhận một đầu vào duy nhất và trả về Boolean.
Xác minh kết quả
Biên dịch lớp bằng cách sử dụng javac trình biên dịch như sau -
C:\JAVA>javac Java8Tester.java
Bây giờ hãy chạy Java8Tester như sau:
C:\JAVA>java Java8Tester
Nó sẽ tạo ra kết quả sau:
Print all numbers:
1
2
3
4
5
6
7
8
9
Print even numbers:
2
4
6
8
Print numbers greater than 3:
4
5
6
7
8
9