Atitit java func interface sumup 目录 1. 函数式接口 1 1.1.1. 什么是函数式接口? 1 1.2.  Function, Supplier, Cons

Atitit  java  func interface sumup

目录

1. 函数式接口 1

1.1.1. 什么是函数式接口? 1

1.2.  Function, Supplier, Consumer, Predicate的区别于应用场合 2

1.3. 他们之间的层级关系这样Function,Function.Supplier    ,Function.Consumer  ,Function.Supplier.Predicate   3

1.4. JDK 1.8之前已有的函数式接口: 3

1.5.     Lambda表达式如何在java类型中表示的呢? 3

2. JDK 1.8 新增加的函数接口: java.util.function 4

3. 3. 函数式接口 2 3.1.2. Java8中常用的全新的接口 3 7

3.1. 3.2. Predicate接口 3 8

3.2. 3.3. Function 接口 4 8

3.3. Supplier 接口 4 8

3.4. Consumer 接口 5 8

3.5. Comparator 接口 5 8

3.6. 3.4. Optional 接口 6 8

3.7. 3.5. Stream 接口 7 8

3.7.1. 3.6.  Filter 过滤 8 8

3.7.2. 3.7. Sort 排序 8 8

3.7.3. Map 映射 9 8

3.7.4. 3.8. Match 匹配 10 8

3.7.5. Count 计数 12 8

3.7.6. 3.9. Reduce 规约 12 8

3.7.7. 3.10. 并行Streams 13 8

3.7.8. 3.11. Map 15 8

4. Ref 8

4.1. Java 8 函数式接口 _ 菜鸟教程.html 8

1. 函数式接口

1.1.1. 什么是函数式接口?

  函数式接口,@FunctionalInterface,简称FI,简单的说,FI就是指仅含有一个抽象方法的接口,以@Functionalnterface标注,注意⚠️,这里的抽象方法指的是该接口自己特有的抽象方法,而不包含它从其上级继承过来的抽象方法,例如:

@FunctionalInterface

Interface FI{

   abstract judge(int a);

   abstract equals();      

}

上一篇我们学习了Function和BiFunction函数式接口,本篇继续了解下其他常用的函数式接口。
先来看下Predicate
Predicate函数式接口的主要作用就是提供一个test方法,接受一个参数返回一个布尔类型,Predicate在stream api中进行一些判断的时候非常常用。

 

 

 函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口

 

1.1.  Function, Supplier, Consumer, Predicate的区别于应用场合

* JDK8新特性☞Supplier接口测试:该接口返回一个任意泛型的值,和Function接口不同的是该接口没有任何参数
 * Consumer接口:表示执行在单个参数上的操作 Compartor接口:

 

 

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

函数式接口可以被隐式转换为lambda表达式。

函数式接口可以现有的函数友好地支持 lambda。

 

 

 Function写法应该是这样的: (x) -> {return y;} 

:Supplier   () -> { return something; }, 

Consumer  (x) -> {}

Predicate  (x) -> ret TRUE  。。和Supplier   的区别是返回bool用来做判断很有用

原则上Function可以运用于所有场合,因为有输入有输出,但较为繁琐。 其他三个都是他的细化模型,写起来简单   

1.2. 他们之间的层级关系这样Function,Function.Supplier    ,Function.Consumer  ,Function.Supplier.Predicate  

Toml表达法

 

 

1.3. 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

1.4.     Lambda表达式如何在java类型中表示的呢?

     语言设计者投入了大量的精力来思考如何使现有的函数友好地支持lambda。最终采取的办法是:增加函数式接口的概念,函数式接口接口就是具有一个方法的普通接口。像这样的

接口可以被隐式的转换为Lambda表达式!!!

 

 

2. 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>

代表了一个两个参数的boolean值方法

5

BooleanSupplier

代表了boolean值结果的提供方

6

Consumer<T>

代表了接受一个输入参数并且无返回的操作

7

DoubleBinaryOperator

代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。

8

DoubleConsumer

代表一个接受double值参数的操作,并且不返回结果。

9

DoubleFunction<R>

代表接受一个double值参数的方法,并且返回结果

10

DoublePredicate

代表一个拥有double值参数的boolean值方法

11

DoubleSupplier

代表一个double值结构的提供方

12

DoubleToIntFunction

接受一个double类型输入,返回一个int类型结果。

13

DoubleToLongFunction

接受一个double类型输入,返回一个long类型结果

14

DoubleUnaryOperator

接受一个参数同为类型double,返回值类型也为double 。

15

Function<T,R>

接受一个输入参数,返回一个结果。

16

IntBinaryOperator

接受两个参数同为类型int,返回值类型也为int 。

17

IntConsumer

接受一个int类型的输入参数,无返回值 。

18

IntFunction<R>

接受一个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<R>

接受一个long类型输入参数,返回一个结果。

27

LongPredicate

R接受一个long输入参数,返回一个布尔值类型结果。

28

LongSupplier

无参数,返回一个结果long类型的值。

29

LongToDoubleFunction

接受一个long类型输入,返回一个double类型结果。

30

LongToIntFunction

接受一个long类型输入,返回一个int类型结果。

31

LongUnaryOperator

接受一个参数同为类型long,返回值类型也为long。

32

ObjDoubleConsumer<T>

接受一个object类型和一个double类型的输入参数,无返回值。

33

ObjIntConsumer<T>

接受一个object类型和一个int类型的输入参数,无返回值。

34

ObjLongConsumer<T>

接受一个object类型和一个long类型的输入参数,无返回值。

35

Predicate<T>

接受一个输入参数,返回一个布尔值结果。

36

Supplier<T>

无参数,返回一个结果。

37

ToDoubleBiFunction<T,U>

接受两个输入参数,返回一个double类型结果

38

ToDoubleFunction<T>

接受一个输入参数,返回一个double类型结果

39

ToIntBiFunction<T,U>

接受两个输入参数,返回一个int类型结果。

40

ToIntFunction<T>

接受一个输入参数,返回一个int类型结果。

41

ToLongBiFunction<T,U>

接受两个输入参数,返回一个long类型结果。

42

ToLongFunction<T>

接受一个输入参数,返回一个long类型结果。

43

UnaryOperator<T>

接受一个参数为类型T,返回值类型也为T。

 

 

 

 

3. 3. 函数式接口 2 3.1.2. Java8中常用的全新的接口 3

3.1. 3.2. Predicate接口 3

3.2. 3.3. Function 接口 4

3.3. Supplier 接口 4

3.4. Consumer 接口 5

3.5. Comparator 接口 5

3.6. 3.4. Optional 接口 6

3.7. 3.5. Stream 接口 7

3.7.1. 3.6.  Filter 过滤 8

3.7.2. 3.7. Sort 排序 8

3.7.3. Map 映射 9

3.7.4. 3.8. Match 匹配 10

3.7.5. Count 计数 12

3.7.6. 3.9. Reduce 规约 12

3.7.7. 3.10. 并行Streams 13

3.7.8. 3.11. Map 15

4. Ref

4.1. Java 8 函数式接口 _ 菜鸟教程.html

Java 8中一些常用的全新的函数式接口 - 001010 - 博客园.html

Java8的四大核心函数式接口 - CSDN博客.html

原文地址:https://www.cnblogs.com/attilax/p/15197586.html