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 ...
随机推荐
- django setting文件那些事
1.设置语言.时区 2.设置新建的用户表作为默认用户表 3.利用apps文件夹收纳app 新建python package apps,然后把app放在该文件夹下 然后setting中添加如下代码: 4 ...
- Oracle 11g rac开启归档
Oracle 11g rac开启归档 查看目前归档状态 #节点1 ykws1 SQL> archive log list; Database log mode No Archive Mode A ...
- unittest测试框架详解
单元测试的定义 1. 什么是单元测试? 单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类,一般是开发来做的,按照测试 ...
- vue组件通信(props,$emit,$attrs,$listeners)
朝颜陌 vue基础----组件通信(props,$emit,$attrs,$listeners) 一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. ...
- frida的简单实用
一.环境 1.环境 1.手机运行服务端 2. 电脑端运行客户端3.进行端口转发 adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27 ...
- frida(hook工具)的环境搭建
一.简介 frida 是一款基于 python+javascript 的 hook 框架,可运行在 android.ios.linux.win等各个平台,主要使用的动态二进制插桩技术. Frida官网 ...
- Core + Vue 后台管理基础框架4——前端授权
1.前言 上篇,我们讲了后端的授权.与后端不同,前端主要是通过功能入口如菜单.按钮的显隐来控制授权的.具体来讲,就是根据指定用户的制定权限来加载对应侧边栏菜单和页面内的功能按钮.我们一个个来讲. 2. ...
- 【简说Python WEB】视图函数操作数据库
目录 [简说Python WEB]视图函数操作数据库 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 ...
- [组件封装]微信小程序-图片批量上传照片墙
描述 批量上传图片, 可设置最大上传个数, 可删除, 可设置默认值. 效果 源码 pictures-wall.wxml <view class="picturesWall"& ...
- WSGI标准、MVC和MTC框架
WSGI服务: wsgiref模块其实就是将整个请求信息给封装了起来,就不需要你自己处理了,假如它将所有请求信息封装成了一个叫做request的对象,那么你直接request.path就能获取到用户这 ...