美文网首页
Lambda下的函数式接口参数都是啥?

Lambda下的函数式接口参数都是啥?

作者: 水云楼 | 来源:发表于2018-11-30 16:48 被阅读0次

前面Optional的学习心得里提到

ifPresent()方法入参为 consumer 表达式,

orElseGet()方法入参为Supplier(供应者)表达式;

filter() 方法入参为Predicate(函数式接口)表达式;

map()方法内里执行的是Function函数调用。

不了解JDK1.8新特性的同学估计要犯嘀咕了,这些东东到底是个啥?我们进源码一窥究竟:

可以看出这几种表达式其实都是以@FunctionalInterface为注解的函数式接口。

使用@Functionallnterface注解的接口统称为函数式接口,那么什么是函数式接口呢?

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

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

@FunctionalInterface
 public interface Supplier<T> {
     /**
       * Gets a result.
       *
       * @return a result
       */
     T get();
 }

可以改为:

Supplier<String> supplier = () -> "aaa";
supplier.get();

而上面四种函数式接口都表示什么意思呢?

Function<T, R> => R apply(T t);  //接受一个输入参数T,返回一个结果 R

T-表示函数的输入类型 

R-表示函数的输出类型

PS:通过这个函数可以做些类型转换的事情呦~

Function<Integer, String> function1 = (x) -> "输入了:"+ x;
System.out.println(function1.apply(7));

Predicate<T> => boolean test(T t); //接受一个输入参数T,返回一个布尔类型的结果

int[] shuzu = {1,2,3};
Predicate<int[]> predicate = (x) -> x.length > 0;
System.out.println(predicate.test(shuzu));

Consumer<T> => void accept(T t); //接受一个输入参数T,无返回值

Consumer<String> consumer = (x) -> System.out.println("使用了参数: " + x);
consumer.accept("aa");

Supplier<T> => T get(); //无输入参数,返回一个结果T

Supplier<String> supplier = () -> "aaa";
supplier.get();

函数式接口不光有上面提到的这四种,jdk1.8之前java就有了函数式接口了:

java.lang.Runnable;java.util.concurrent.Callable等,上面四种为1.8后新添加的接口,他们在java.util.function包下:

相关文章

  • Lambda下的函数式接口参数都是啥?

    前面Optional的学习心得里提到 ifPresent()方法入参为consumer表达式, orElseGet...

  • 函数式编程

    1. lambda表达式 格式:(参数)->表达式(参数)->{语句;}示例 函数式接口 函数式接口:有仅只有一个...

  • Lambda

    Lambda表达式的目标类型必须是函数式接口。函数式接口代表只包含一个抽象方法的接口 四大函数式接口参数返回描述C...

  • java 8 新特性-lambda表达式

    lambda表达式 理解(行为参数化)lambda表达式是一个函数式接口的实现,可以将函数作为方法参数,或者将代码...

  • 聊一下lambda表达式四大函数接口

    lambda表达式 主要以functionInterface 注解。 成为函数式 接口。 方法可以是有参数。参数类...

  • 3.JDK1.8特性之函数式接口

    1.什么是函数式接口 2.自定义函数式接口 3.Lambda表达式替代函数式接口做参数使用 4.Java内置四大核...

  • Kotlin Lambda表达式的理解

    目录 函数式参数的lambda写法 对于kotlin lambda的一点想法 1.函数式参数的lambda写法 l...

  • Kotlin之使用Java函数式接口

    把lambda当做参数传递给Java方法 可以把lambda传给任何期望函数式接口的方法 在Kotlin中,可以调...

  • Lambda 几个函数式接口

  • Lambda表达式

    Lambda表达式与函数式接口紧密相关,函数式接口介绍 Lambda表达式的基本语法 Java Lambda表达式...

网友评论

      本文标题:Lambda下的函数式接口参数都是啥?

      本文链接:https://www.haomeiwen.com/subject/jfuhcqtx.html