函数式接口就是只包含一个抽象方法的接口A(不包括默认抽象方法,但包括继承来的方法);这个接口用来作为一个可变作用的方法B的参数。函数式接口的抽象方法的参数类型和返回值就是一套签名,这个签名叫做函数描述符,可以描述lambda的类型。@FunctionalInterface

   1.8给了几个用来描述常见函数描述符的函数式接口:Predicate、Consumer、Function

   1、Predicate

    Predicate接口定义了一个名为test的抽象方法,它接受泛型T的对象,返回一个boolean。就是传进来任意对象在方法中用来判断是否(断言)。

@FunctionalInterface
public interface Predicate<T>{
boolean test(T t);
} public static<T> List<T> filter(List<T> list,Predicate<T> p){
List<T> results= new ArrayList<>();
for(T s:list){
if(p.test(s)){
results.add(s);
}
}
return results;
} Predicate<String> nonEmptyStringPredicate=(String s)->!s.isEmpty();
List<String> nonEmpty=filter(listOfStrings,nonEmptyPredicate);

    2、Consumer

    Consumer接口定义了一个accept()的方法,参数为一个泛型T,返回值为空;就是消费的意思,方法将传入的泛型对象进行某些操作处理就消费空了。

@FunctionalInterface
public interface Consumer<T>{
void accept(T t);
} public static <T> void forEach(List <T> list,Consumer<T> c){
for(T i:list){
c.accept(i);
}
} forEach(Arrays.asList(1,2,3,4,5),(Integer i)->System.out.println(i));

  

    3、function

    function接口定义了一个apply()的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。通过该接口的抽象方法就可以将一种泛型经过一系列操作变为另一种泛型。

@FunctionalInterface
public interface Function<T,R>{
R apply(T t);
} public static<T,R> List<R> map(List<T> list,Function<T,R> f){
List<R> result = new ArrayList<>();
for(T s:list){
result.add(f.apply(s));
}
return result;
} List<Integer> l=map(Arrays.aslist("lambdas","in","action"),(String s)->s.length());

lambda的函数式接口的更多相关文章

  1. Java8一Lambda与函数式接口

    关于Lambda表示在工作学习中会经常用到,但并没有全面的去了解.在这里做一个较为详细的记录供以后学习查阅.主要参考Java 8 Lambda 表达式 引言 Java8之前,我们在使用Runnale创 ...

  2. 8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理

    我是风筝,公众号「古时的风筝」.一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  3. java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

  4. 第46天学习打卡(四大函数式接口 Stream流式计算 ForkJoin 异步回调 JMM Volatile)

    小结与扩展 池的最大的大小如何去设置! 了解:IO密集型,CPU密集型:(调优)  //1.CPU密集型 几核就是几个线程 可以保持效率最高 //2.IO密集型判断你的程序中十分耗IO的线程,只要大于 ...

  5. Java的lamda表达式/函数式接口/流式计算

    在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算.在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率 ...

  6. Lambda表达式与函数式接口

    Lambda表达式的类型,也被称为目标类型(targer type),Lambda表达式的目标类型必须是"函数式接口(functional interface)".函数式接口代表只 ...

  7. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  8. Java8(1)之Lambda表达式初步与函数式接口

    Lambda表达式初步 介绍 什么是Lambda表达式? 在如 Lisp.Python.Ruby 编程语言中,Lambda 是一个用于表示匿名函数或闭包的运算符 为何需要lambda表达式? 在 Ja ...

  9. java8实战二------lambda表达式和函数式接口,简单就好

    一.Lambda 可以把Lambda表达式理解为简洁地i表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还是一个可以抛出的异常列表. 听上去,跟我们用的匿名类,匿名 ...

随机推荐

  1. 解决的方法:mysql_connect()不支持请检查mysql模块是否正确载入

    故障现象:linux 安装discuz 错误提示:mysql_connect() 不支持请检查mysql模块是否正确载入. 解决的方法:查看/usr/lib/php/modules/ (64位的看/u ...

  2. (转)c++ typedef 函数指针详细说明

    转自:http://blog.csdn.net/future200x/article/details/5350134 一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可以用一个指针变 ...

  3. swift-初探webView与JS交互

    公司接下来的项目需要用swift内嵌h5来实现, 以前没有做过swift项目, 现在慢慢将所学的一点一滴记录一下 一个是怕自己忘了- =, 再就是希望大家看到能帮助我哈哈哈 前几天想要直接用swift ...

  4. python 从bulkblacklist信誉查询网站提交查询

    import urllib import urllib2 #import webbrowser import re import socket def is_domain_in_black_list( ...

  5. 存储概念解析:NAS与SAN的区别

    目前存储网络技术领域中的两个主旋律是SAN(存储区域网络)和NAS(网络连接区域存储),两者都宣称是解决现代企业高容量数据存储需求的最佳选择. 正如在餐厅就餐时大厨不会为您传菜,跑堂不会为您烹制鲜橙烩 ...

  6. PHP的错误处理和异常处理

    由于教程是围绕着文件打开做的错误处理,所以先记录几个用于文件处理的一些函数,fopen 用于打开一个文件:file_exists 用于检查目录是否存在:fclose( $变量 )用于指定关闭打开的文件 ...

  7. P3图片导致iOS9.3以下崩溃问题

    如果你刚刚升级了Xcode8,而你的项目的Deployment Target是iOS 9.3以下,运行iOS8的时候过了几十秒后crash到main函数,出现EXC_BAD_ACCESS,或者崩溃到i ...

  8. php 生成不重复的随机字符串

    md5(uniqid(md5(microtime(true)),true))

  9. SQL where 条件顺序对性能的影响有哪些

    经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响,我的直觉是没有影响,因为如果这个顺序有影响,Oracle应该早就能够做到自动优化,但一直没有关于这方面的确凿证据.在网上 ...

  10. RxSwift 之变换操作

    https://www.aliyun.com/jiaocheng/349821.html RxSwift入坑解读-你所需要知道的各种概念 http://www.open-open.com/lib/vi ...