Java函数式接口
函数式接口
定义且只定义了一个
抽象方法.函数式接口的抽象方法的签名称为函数描述符
。
Java 8的java.util.function
包中引入了几个新的函数式接口。
1.Predicate
java.util.function.Predicate<T>
接口定义了一个名叫 test 的抽象方法,它接受泛型 T对象,并返回一个 boolean 。
在需要表示一个涉及类型T的布尔表达式时,就可以使用这个接口。
比如,可以定义一个接受 String对象的 Lambda表达式,如下所示。
@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, nonEmptyStringPredicate);
2.Consumer
java.util.function.Consumer<T> 定义了一个名叫 accept的抽象方法,它接受泛型 T的对象,没有返回(void).
如果需要访问类型 T的对象,并对其执行某些操作,就可以使用这个接口。比如,可以用它来创建一个 forEach 方法,接受一个 Integers的列表,并对其中每个元素执行操作。
在下面的代码中,就可以使用这个forEach方法,并配合 Lambda来打印列表中的所有元素。
@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
java.util.function.Function<T, R>接口定义了一个叫作 apply的方法,它接受一个泛型 T的对象,并返回一个泛型 R的对象。
如果需要定义一个 Lambda ,将输入对象的信息映射到输出,就可以使用这个接口(比如提取苹果的重量,或把字符串映射为它的长度)。
在下面的代码中,展示如何利用它来创建一个map方法,以将一个String列表映射到包含每个String长度的Integer列表。
@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;
}
// [7, 2, 6]
List<Integer> l = map(Arrays.asList("lambdas","in","action"),(String s) -> s.length());
Java函数式接口的更多相关文章
- Java 函数式接口
目录 Java 函数式接口 1. 函数式接口 1.1 概念 1.2 格式 1.3 函数式接口的使用 2. 函数式编程 2.1 Lambda的延迟执行 性能浪费的日志案例 使用Lambda表达式的优化 ...
- Java函数式接口Consumer
Consumer是java8提供的函数式接口之一,意思为消费者,接受参数而不返回值 void accept(T t); default Consumer<T> andThen(Consum ...
- Java 函数式接口 lambda
import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class Demo1 { ...
- Java函数式接口Function
Function 提供了一个抽象方法 R apply(T t) 接收一个参数 返回 一个值,还有两个默认方法和一个静态方法 compose 是一个嵌套方法,先执行before.apply() 得到运 ...
- Java函数式接口与Lambda表达式
什么是函数式接口? 函数式接口是一种特殊的接口,接口中只有一个抽象方法. 函数式接口与Lambda表达式有什么关系? 当需要一个函数式接口的对象时,可以提供一个lambda表达式. package l ...
- JAVA 函数式接口与c#委托对应关系(一)
C# Action委托 VS JAVA Action 接口函数 1.c#:Action 封装一个方法,该方法不具有参数并且不返回值. 构造实体类类 using System; namespace Ac ...
- Java8 函数式接口-Functional Interface
目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 ...
- Java 8中一些常用的全新的函数式接口
这一篇属于菜鸟级博客,只是介绍了一些在Java 8中新出现的一些很有用的接口,通过一些简单的例子加以说明,没有深入地阐述. 函数式接口 什么是函数式接口? 函数式接口,@FunctionalInter ...
- Java 8新特性-1 函数式接口
Java 8 引入的一个核心概念是函数式接口(Functional Interfaces). 通过在接口里面添加一个抽象方法,这些方法可以直接从接口中运行. 如果一个接口定义个唯一一个抽象方法,那么这 ...
随机推荐
- 预处理、const、static、sizeof-说明内联函数使用的场合
1:首先使用inline函数可以完全取代表达式形式的宏定义. 内联函数在C++类中的应用最广的应该是用来定义存取函数.我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们 ...
- substring(x)和substring(x,y)的用法
substring(x)和substring(x,y)的用法 代码: public class textmu { /** * @param args */ public static void mai ...
- 机器学习朴素贝叶斯 SVC对新闻文本进行分类
朴素贝叶斯分类器模型(Naive Bayles) Model basic introduction: 朴素贝叶斯分类器是通过数学家贝叶斯的贝叶斯理论构造的,下面先简单介绍贝叶斯的几个公式: 先验概率: ...
- Qt网络获取本机网络信息
下面我们就讲解如何获取自己电脑的IP地址以及其他网络信息.这一节中,我们会涉及到网络模块(QtNetwork Module)中的QHostInfo ,QHostAddress ,QNetworkInt ...
- 7.Mahout菩萨
1.Maout简介 2.机器学习介绍 3.Mahout算法介绍
- 如何配置git send-email相关的邮箱信息?
关键是配置smtpserver,请参考此处
- UDDI:百科
ylbtech-UDDI:百科 UDDI是一种用于描述.发现.集成Web Service的技术,它是Web Service协议栈的一个重要部分.通过UDDI,企业可以根据自己的需要动态查找并使用Web ...
- css滚动条美化
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 5px; height: 5px; background-color: #F5F5 ...
- jeecg中的datagrid显示一条记录为橙色表示完结
效果如图: 1.操作小结后面的已完结js $(document).ready(function(){ $('.datagrid-toolbar').children("span") ...
- Oracle存储过程、游标、函数
SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数 ...