Java8 学习笔记--函数式接口
通过之前的函数式接口与lambda表达式的关系那篇文章,大家应该对函数式接口有了一定的了解了,在Java中它是lambda表达式的基础,没有函数式接口就没有办法使用lambda表达式。
函数式接口如此重要,所以Java8 API给我们提供了除了以前就有的Comparator接口和Runnable接口外,还提供了很多全新的函数式接口使用。下面介绍几个这些接口:
Predicate<T>接口
这个接口顾名思义,是一个用来判断的接口,其中的唯一抽象方法为:boolean test(T t);,其接受T类型一个参数,返回一个boolean值,我们可以用来对这个参数进行一系列自己定义的判断方法并返回结果。举例:
Predicate<String> predicate = a -> a.indexOf("java") != -1; // 用来判断是否含有「java」字符串
boolean test1 = predicate.test("java"); // true
boolean test2 = predicate.test("jva"); // false
Predicate接口的其他默认方法还有:
Predicate<T> and(Predicate<? super T> other) // 与
Predicate<T> negate() // 取反
Predicate<T> or(Predicate<? super T> other) // 或
Function<T, R>接口
这个接口用来表示一个函数,接收一个类型的参数,返回一个类型结果。其唯一的抽象方法为:R apply(T t);,用来接收一个T类型的参数,返回一个R类型的值。例子如下:
Function<String, Integer> function = a -> Integer.valueOf(a); // 可以简写为 = Integer::valueOf
Integer apply = function.apply("0123"); // 结果为:123
Function接口的其他默认方法还有:
Function<V, R> compose(Function<? super V, ? extends T> before) // 先执行参数中的函数,后执行自身的
Function<T, V> andThen(Function<? super R, ? extends V> after) // 先执行自身的,后执行参数中的函数
Supplier<T>接口
Supplier接口产生一个给定类型的结果,并且没有输入参数。唯一的抽象方法为:T get();,使用例子如下:
Supplier<Person> supplier = () -> {
return new Person();
}; // 可以简写为 supplise = Person::new;
Person person = supplier.get();
Consumer<T>接口
这个接口表示对于一个输入参数进行运算,与Function接口的不同是,它没有返回结果。其唯一的抽象方法为:void accept(T t);,使用例子如下:
Consumer<int[]> consumer = n -> {
for (int i = 0; i < n.length; i++) {
System.out.println(n[i]);
}
};
int[] nums = {1, 2, 3, 4, 5};
consumer.accept(nums); // 依次在每行输出一个数字
对于函数式接口暂时就介绍到这里,在java8 API中还有许多这样的接口,大家可以自己探索使用。
Java8 学习笔记--函数式接口的更多相关文章
- Java8 学习笔记--函数式接口与lambda表达式的关系
在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的. 对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方.为了确保函数式接口的 ...
- JAVA8学习——深入浅出函数式接口FunctionInterface(学习过程)
函数式接口 函数式接口详解:FunctionInterface接口 话不多说,先打开源码,查阅一番.寻得FunctionInterface接口 package java.util.function; ...
- java8新特性学习:函数式接口
本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...
- Java8学习笔记----Lambda表达式 (转)
Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...
- Java8学习笔记目录
Java8学习笔记(一)--Lambda表达式 Java8学习笔记(二)--三个预定义函数接口 Java8学习笔记(三)--方法引入 Java8学习笔记(四)--接口增强 Java8学习笔记(五)-- ...
- java基础---->java8中的函数式接口
这里面简单的讲一下java8中的函数式接口,Function.Consumer.Predicate和Supplier. 函数式接口例子 一.Function:接受参数,有返回参数 package co ...
- Java8学习笔记(八)--方法引入的补充
在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...
- 【数学建模】MATLAB学习笔记——函数式文件
MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...
- 【转】Java8学习笔记(1) -- 从函数式接口说起
http://blog.csdn.net/zxhoo/article/details/38349011 函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Jav ...
随机推荐
- c++第二周阶段小测2
函数参数已完成(全部是正确答案) 1 [单选题] 以下关于函数参数的说法,不正确的是 A. 函数调用时,先将实参的值按照位置传递给对应的形参. B. 实参与形参的个数及顺序不必一一对应. ...
- Natas15 Writeup(sql盲注之布尔盲注)
Natas15: 源码如下 /* CREATE TABLE `users` ( `username` varchar(64) DEFAULT NULL, `password` varchar(64) ...
- MyBatis框架——延迟加载
延迟加载也叫惰性加载或者懒加载,使⽤延迟是为了提⾼程序的运⾏效率,具体是通过尽量少执⾏ SQL 语句来提升效率.Java 程序与数据库的交互频率越低越好,MyBatis 提供的延迟加载功能就可以做到这 ...
- mac开发错误:errSecInternalComponent
errSecInternalComponent Command CodeSign failed with a nonzero exit code 修改方法: Build Settings -> ...
- [BJDCTF 2nd]fake google
[BJDCTF 2nd]fake google 进入页面: 试了几下发现输入xxx,一般会按的格式显示, P3's girlfirend is : xxxxx 然后猜测会不会执行代码,发现可以执行 & ...
- C 2012年笔试题
1指出程序段中的错误:分析错误的原因,并进行修改 1.1函数 swap 将两个字符串(字符数组作实参,长度不超过 100)的内容进行交换 void swap(char *pa,char *pb) { ...
- 16. nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auditUnitName"
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver:handleHttpMessageNotRead ...
- MQ的理论理解
MQ(消息队列)简介 概念 : 消息队列(MQ)是一种应用程序对应用程序的通信方法. 应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们. 消息传递指的是程序之间 ...
- Kullback-Leibler(KL)散度介绍
在这篇文章中,我们将探讨一种比较两个概率分布的方法,称为Kullback-Leibler散度(通常简称为KL散度).通常在概率和统计中,我们会用更简单的近似分布来代替观察到的数据或复杂的分布.KL散度 ...
- Faiss向量相似性搜索
Faiss 快速入门(1) Faiss 更快的索引(2) Faiss低内存占用(3) Faiss 构建: clustering, PCA, quantization(4) 如何选择Faiss索引(5)