黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Java8新特性
Java9新特性

Java8函數式接口

函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。

函數式接口可以被隱式轉換為 lambda 表達式。

Lambda 表達式和方法引用(實際上也可認為是Lambda表達式)上。

如定義了一個函數式接口如下:

@FunctionalInterface
interface GreetingService 
{
    void sayMessage(String message);
}

那么就可以使用Lambda表達式來表示該接口的一個實現(注:JAVA 8 之前一般是用匿名類實現的):

GreetingService greetService1 = message -> System.out.println("Hello " + message);

函數式接口可以對現有的函數友好地支持 lambda。

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

代表了一個接受兩個輸入參數的操作,并且不返回任何結果

2

BiFunction

代表了一個接受兩個輸入參數的方法,并且返回一個結果

3

BinaryOperator

代表了一個作用于于兩個同類型操作符的操作,并且返回了操作符同類型的結果

4

BiPredicate

代表了一個兩個參數的boolean值方法

5

BooleanSupplier

代表了boolean值結果的提供方

6

Consumer

代表了接受一個輸入參數并且無返回的操作

7

DoubleBinaryOperator

代表了作用于兩個double值操作符的操作,并且返回了一個double值的結果。

8

DoubleConsumer

代表一個接受double值參數的操作,并且不返回結果。

9

DoubleFunction

代表接受一個double值參數的方法,并且返回結果

10

DoublePredicate

代表一個擁有double值參數的boolean值方法

11

DoubleSupplier

代表一個double值結構的提供方

12

DoubleToIntFunction

接受一個double類型輸入,返回一個int類型結果。

13

DoubleToLongFunction

接受一個double類型輸入,返回一個long類型結果

14

DoubleUnaryOperator

接受一個參數同為類型double,返回值類型也為double。

15

Function

接受一個輸入參數,返回一個結果。

16

IntBinaryOperator

接受兩個參數同為類型int,返回值類型也為int 。

17

IntConsumer

接受一個int類型的輸入參數,無返回值 。

18

IntFunction

接受一個int類型輸入參數,返回一個結果 。

19

IntPredicate

:接受一個int輸入參數,返回一個布爾值的結果。

20

IntSupplier

無參數,返回一個int類型結果。

21

IntToDoubleFunction

接受一個int類型輸入,返回一個double類型結果 。

22

IntToLongFunction

接受一個int類型輸入,返回一個long類型結果。

23

IntUnaryOperator

接受一個參數同為類型int,返回值類型也為int 。

24

LongBinaryOperator

接受兩個參數同為類型long,返回值類型也為long。

25

LongConsumer

接受一個long類型的輸入參數,無返回值。

26

LongFunction

接受一個long類型輸入參數,返回一個結果。

27

LongPredicate

R接受一個long輸入參數,返回一個布爾值類型結果。

28

LongSupplier

無參數,返回一個結果long類型的值。

29

LongToDoubleFunction

接受一個long類型輸入,返回一個double類型結果。

30

LongToIntFunction

接受一個long類型輸入,返回一個int類型結果。

31

LongUnaryOperator

接受一個參數同為類型long,返回值類型也為long。

32

ObjDoubleConsumer

接受一個object類型和一個double類型的輸入參數,無返回值。

33

ObjIntConsumer

接受一個object類型和一個int類型的輸入參數,無返回值。

34

ObjLongConsumer

接受一個object類型和一個long類型的輸入參數,無返回值。

35

Predicate

接受一個輸入參數,返回一個布爾值結果。

36

Supplier

無參數,返回一個結果。

37

ToDoubleBiFunction

接受兩個輸入參數,返回一個double類型結果

38

ToDoubleFunction

接受一個輸入參數,返回一個double類型結果

39

ToIntBiFunction

接受兩個輸入參數,返回一個int類型結果。

40

ToIntFunction

接受一個輸入參數,返回一個int類型結果。

41

ToLongBiFunction

接受兩個輸入參數,返回一個long類型結果。

42

ToLongFunction

接受一個輸入參數,返回一個long類型結果。

43

UnaryOperator

接受一個參數為類型T,返回值類型也為T。

函數式接口實例

Predicate <T>接口是一個函數式接口,它接受一個輸入參數 T,返回一個布爾值結果。

該接口包含多種默認方法來將Predicate組合成其他復雜的邏輯(比如:與,或,非)。

該接口用于測試對象是 true 或 false。

我們可以通過以下實例(Java8Tester.java)來了解函數式接口 Predicate <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 

 

全部教程
主站蜘蛛池模板: 91亚洲精品 | 亚洲免费二区三区 | 黄色毛片视频免费 | 欧美日韩一区二区在线观看视频 | 91免费国产高清在线 | 欧美一级h | 天天操2021 | 成人激情视频网 | 一二三四视频社区在线播放中国 | 天天拍天天操 | 人喾交性专区免费看 | 毛片免费永久不卡视频观看 | 韩国xxxx色视频在线观看 | 一级生活录像 | 色视频免费版高清在线观看 | 在线观着免费观看国产黄 | 大象焦伊人久久综合网色视 | 一插菊花网| 日本免费一级视频 | 中日韩精品视频在线观看 | 最近免费中文字幕mv | 一级毛片在线看在线播放 | 日韩毛片在线看 | 日韩欧美高清在线 | 波多野结衣在线视频观看 | 亚洲成网777777国产精品 | 视频一区二区不卡 | 成年黄网站色视频免费观看 | 一区在线免费观看 | 污污香蕉视频 | 成人福利在线 | 日韩特黄特色大片免费视频 | 99久久中文字幕伊人情人 | 老司机免费福利视频无毒午夜 | 一级特级女人18毛片免费视频 | 一级特黄a免费大片 | 日韩免费在线观看视频 | 精品国偷自产在线不卡短视频 | 天天干天天曰 | 日本福利片在线观看 | 亚洲一区中文字幕 |