大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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 

 

全部教程
主站蜘蛛池模板: 日产一二三四五六七区麻豆 | 天天干天天干天天色 | 爱唯侦察1024入口地址 | 国产精品自线在线播放 | 午夜日韩 | 久久综合噜噜激激的五月天 | 婷婷中文在线 | 精品煌色视频网站在线观看 | 久久新视频 | 成人欧美视频免费看黄黄 | 中文亚洲欧美 | 波多野结衣免费一区二区三区香蕉 | 全免费a级毛片免费看视频免 | 久久一日本道色综合久久m 久久一色本道亚洲 | 精品国产欧美一区二区最新 | 亚洲人人草| 精品国产高清自在线一区二区三区 | 黄色在线视频网站 | 亚洲精品国产手机 | 国产成人精品久久综合 | 午夜性盈盈 | 亚洲一区有码 | 久99久精品视频免费观看v | 欧美大交乱xxxxxbbb | 中文在线免费不卡视频 | 一级毛片老太婆交性欧美 | 四虎国产视频 | 全部免费特黄特色大片视频 | 久久精品成人 | 日本一区二区三区免费在线观看 | 暗香影院午夜国产精品 | 一级毛片成人免费看免费不卡 | 偶偶福利视频 | 日日干日日操 | 中文亚洲欧美 | 国产亚洲精品视频中文字幕 | va亚洲va日韩不卡在线观看 | 日韩国产成人资源精品视频 | 五月婷婷在线播放 | 日一级片| 99视频在线免费观看 |