大战熟女丰满人妻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 

 

全部教程
主站蜘蛛池模板: 国产a v高清一区二区三区 | 久久伊伊香蕉综合精品 | 99视频精品全部免费观看 | 四虎影视在线观看 | 免费区欧美一级毛片精品 | 日本人成免费大片 | 国产大片免费观看中文字幕 | 337p日本欧洲亚洲大胆艺术 | 成人aa在线观看视频 | 亚洲精品第一综合99久久 | www.久操| 欧美中文字幕视频 | 久草在线视频精品 | 色综合影视 | 四虎影永久在线观看网址 | 91国内精品在线 | 69做爰视频在线观看 | 日本高清毛片视频在线看 | 成人日b视频 | 99久久免费精品国产免费高清 | 国产精品一区二区三区四区 | 欧洲免费在线视频 | 四虎高清在线精品免费观看 | 国内精品久久久久影院不卡 | 国产一区二区三区在线免费观看 | 欧美日韩激情在线一区二区 | 最近在线更新中文字幕1 | 日韩欧美一区二区在线 | 97视频免费播放观看在线视频 | 国产精品99久久99久久久看片 | 亚洲欧美成人在线 | 欧洲成人免费高清视频 | 九九热久久免费视频 | 亚洲黄色在线观看视频 | 久久久视频在线 | 99久久精品免费看国产一区二区 | 国产真实偷乱视频在线观看 | 91成人精品视频 | 婷婷的五月 | 四虎影视在线 | 久久精品国产99久久6动漫欧 |