Java 8新特性-5 内建函数式接口
在之前的一片博文 Lambda 表达式,提到过Java 8提供的函数式接口。在此文中,将介绍一下Java 8四个最基本的函数式接口
对于方法的引用,严格来讲都需要定义一个接口。不管我们如何操作实际上有可能操作的接口只有四种。
Java 8 提供了函数式接口包java.util.function.*,在该包下有许多Java 8内建的函数式接口。不过基本上分为四种基本的:
- 功能型接口 (Function)
- 将 T 作为输入,返回 R 作为输出,他还包含了和其他函数组合的默认方法。
@FunctionalInterface
public interface Function<T, R> { R apply(T t); } - 示例代码
-
public static void main(String[] args) { // 这里用到了Java8的 方法引用,功能型函数式接口!
Function<String,Boolean> function = "Hello Java" :: endsWith;
System.out.println(function.apply("Java"));
}
- 将 T 作为输入,返回 R 作为输出,他还包含了和其他函数组合的默认方法。
- 消费型接口 (Consumer)
- 将 T 作为输入,不返回任何内容,表示在单个参数上的操作。
@FunctionalInterface
public interface Consumer<T> { void accept(T t); } - 示例代码
class TestDemo{
//此方法没有返回值,但是有输入参数
public void fun(String str){
System.out.println(str);
}
} public class TestFunctional {
public static void main(String[] args) {
TestDemo demo = new TestDemo();
//消费型接口,只有输入参数,没有输出参数
Consumer<String> consumer = demo :: fun;
consumer.accept(""); }
}
- 将 T 作为输入,不返回任何内容,表示在单个参数上的操作。
- 供应型接口 (Supplier)
- 没有输入参数,只有T返回输出
@FunctionalInterface
public interface Supplier<T> { T get(); } - 示例代码
public class TestFunctional {
public static void main(String[] args) { //供应商类型接口,只有输出参数,没有输入参数!
Supplier<String> supplier = "java 8" :: toUpperCase;
System.out.println(supplier.get());
}
}
- 没有输入参数,只有T返回输出
- 断言型接口 (Predicate)
- 将 T 作为输入,返回一个布尔值作为输出,该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(与、或、非)。
@FunctionalInterface
public interface Predicate<T> { boolean test(T t); } - 示例代码
public class TestFunctional {
public static void main(String[] args) { //断言类型接口。有输入参数,输出参数为布尔值
Predicate<String> predicate = "Android" :: equalsIgnoreCase;
System.out.println(predicate.test("android")); }
}
- 将 T 作为输入,返回一个布尔值作为输出,该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(与、或、非)。
所以在Java 8中由于存在有以上的四个功能型接口,所以一般很少会由用户去定义新的函数式接口!
Java 8新特性-5 内建函数式接口的更多相关文章
- Java 8 新特性1-函数式接口
Java 8 新特性1-函数式接口 (原) Lambda表达式基本结构: (param1,param2,param3) -> {代码块} 例1: package com.demo.jdk8; i ...
- Java 8 新特性:1-函数式接口
(原) Java 8 新特性1-函数式接口 Lambda表达式基本结构: (param1,param2,param3) -> {代码块} Lambda表达式结构: (type1 arg1,typ ...
- java8新特性学习:函数式接口
本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...
- Java JDK1.8新特性之四大函数式接口
JDK 1.8的一些新特性 四大核心函数式接口(Consumer.Predicate.Supplier.Function),结合lambda表达式 import java.util.ArrayList ...
- Spring 4支持的Java 8新特性一览
有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览S ...
- Java 8 新特性概述
Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性.其中主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作 ...
- Java 8 新特性终极版
声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...
- Java 8新特性前瞻
快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...
- 【整理】Java 8新特性总结
闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...
随机推荐
- 初探javascript
javascript是一种在网络广泛应用的脚本语言,虽然名字与java相近,但其实两者并没有直接的关系,脚本语言是一种为了便于操作和拓展功能而开发出来的解释性语言,不同于传统的编程语言,脚本语言不需要 ...
- clang: error: linker command failed with exit code 1 (use -v to see invocati
安装了 pod 的项目,如果仍旧打开 xcodeproject 文件, 运行时会弹出此 bug
- FastDateFormat
1 public static final FastDateFormat ISO_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd&q ...
- oracle 导出指定的存储过程
只能导出以下类型: PROCEDURE PACKAGE PACKAGE BODY TYPE BODY FUNCTION TYPE 也就是,表需要单独导出并导入(已经能俭省很多手动操作了). SET e ...
- Codeforces Round #361 (Div. 2) D
D - Friends and Subsequences Description Mike and !Mike are old childhood rivals, they are opposite ...
- 基于TCP协议的socket通信
一.服务器端 1.创建serverSocket,即服务器端的socket,绑定指定的端口,并侦听此端口 ServerSocket server = new ServerSocket(8888); 2. ...
- 关于媒体查询 @Media Screen 与响应式
其实CSS2中已经有了媒体查询的概念,但是CSS3中媒体查询功能更加的强大! 首先,我们来看一个小例子 设置媒体查询的 Max Width ,改变窗口大小到600px的时候就会触发一下代码: @med ...
- 各种android应用模仿源码
V2EX的非官方Android客户端,极力遵循Material Design风格 下载 湘潭大学三翼校园"四季电台" Android客户端 下载 高仿煎蛋客户端 下载 ...
- 【转】WriteMessage的信息在AutoCAD中命令行中实时显示
之前程序中有段发送信息到命令行上显示的代码,如下: ed.WriteMessage("开始标注横断面高程,请稍候!"); 但是发现命令行中并不马上显示,代码也明明运 ...
- 用C语言编写生成小学四则运算程序
使用软件——VS 2015 使用环境——C语言 早在上周我就开始使用C#语言做,由于最后一点问题而放弃,之后用C语言开始做,很顺利,但是也碰到了一些问题,但是通过了百度文库上的一些程序的借鉴和吴阿平同 ...