通过之前的函数式接口与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 学习笔记--函数式接口的更多相关文章

  1. Java8 学习笔记--函数式接口与lambda表达式的关系

    在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的. 对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方.为了确保函数式接口的 ...

  2. JAVA8学习——深入浅出函数式接口FunctionInterface(学习过程)

    函数式接口 函数式接口详解:FunctionInterface接口 话不多说,先打开源码,查阅一番.寻得FunctionInterface接口 package java.util.function; ...

  3. java8新特性学习:函数式接口

    本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...

  4. Java8学习笔记----Lambda表达式 (转)

    Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家       本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...

  5. Java8学习笔记目录

    Java8学习笔记(一)--Lambda表达式 Java8学习笔记(二)--三个预定义函数接口 Java8学习笔记(三)--方法引入 Java8学习笔记(四)--接口增强 Java8学习笔记(五)-- ...

  6. java基础---->java8中的函数式接口

    这里面简单的讲一下java8中的函数式接口,Function.Consumer.Predicate和Supplier. 函数式接口例子 一.Function:接受参数,有返回参数 package co ...

  7. Java8学习笔记(八)--方法引入的补充

    在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...

  8. 【数学建模】MATLAB学习笔记——函数式文件

    MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...

  9. 【转】Java8学习笔记(1) -- 从函数式接口说起

    http://blog.csdn.net/zxhoo/article/details/38349011 函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Jav ...

随机推荐

  1. Python卸载

    前言 自己瞎折腾下载Python3.8.2,把之前下载好的python3.7.3覆盖掉.在运行之前Python环境的程序多次未果后.找到原因,Python3.7.3的包不支持Python3.8.2.于 ...

  2. Java中将文件夹复制到另一个文件夹

    文件夹的拷贝*** public static void copyDir(String sourcePath, String newPath) { File start = new File(sour ...

  3. 这些MongoDB的隐藏操作你真的都掌握了吗?反正我是刚知道

    背景 最近公司系统还原用户时偶尔会出现部分用户信息未还原成功的问题,最为开发人员,最头疼的不是代码存在bug,而是测试发现了bug,但一旦我去重现,它就不见了.Are you kidding me? ...

  4. 详解如何实现斗鱼、B站等全局悬浮窗直播小窗口

    最近业务需求需要我们直播返回或者退出直播间时,开一个小窗口在全局继续直播视频,先看效果图. 调研了一下当下主流直播平台,斗鱼.BiliBili等app,都是用WindowManger做的(这个你可以在 ...

  5. (11)nc命令(每周一个linux命令)

    nc(netcat)实用程序几乎可用于所有涉及TCP或UDP的事情.它可以打开TCP连接,发送UDP数据包,监听任意TCP和UDP端口,进行端口扫描,处理IPv4和IPv6.与telnet不同,nc可 ...

  6. MybatisPlus SQL 打印控制台

    #applicaton.yml 配置 mybatis-plus: configuration: # 是否将sql打印到控制面板(该配置会将sql语句和查询的结果都打印到控制台) log-impl: o ...

  7. CSS导入方式和六种选择器

    1.css的导入方式 1.1 行内嵌式 1.2 内部方式 1.2.1含义: css代码写在<head>的<style>标签中 1.2.2 优点 方便在同页面中修改样式 1.2. ...

  8. 33. CentOS7 静态ip设置

    1.网络连接选择NAT模式: 2.关闭vmware的dhcp:选择编辑-->虚拟网络编辑器,选择VMnet8,去掉使用本地DHCP服务将ip地址分配给虚拟机(D). 3. 点击NAT设置(S)查 ...

  9. 李宏毅老师机器学习课程笔记_ML Lecture 0-1: Introduction of Machine Learning

    引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...

  10. 基础组合问题 ————从n个物品里选m个

    package test; import java.util.*; public class Main{ public static int f(int n,int k, int goal){ if( ...