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 ...
随机推荐
- 配置nginx的图片服务器
user nginx; worker_processes 8; error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; pid ...
- Redis安装配置(Windows版)
近期项目中引入Redis,故记录下来,方便日后查看. 可参考(http://www.cnblogs.com/happyday56/p/3916388.html)不说废话,直奔主题. 一.安装前的准备: ...
- Linux上Tomcat部署JavaWeb项目
一.安装JDK 配置java的环境变量,修改/etc/profile文件:vi /etc/profile 然后按下字母i进入插入模式, shift+insert粘贴; esc退出编辑; :wq保存退出 ...
- homework-02
关于输入 先来说说关于输入的事情.其实我最一开始并没有发现输入数字之间是用逗号隔开的,所以我是当做空格隔开来写的,后来发现以后匆忙改正,利用strtok与atoi函数从字符串中提取出用逗号隔开的数字. ...
- Unity自动寻路入门指南
所有用于成为NavMesh的网格都必须被指定为 Navigation Static . 方法如下,选中GameObject,然后在菜单栏的[Window]-[Navigation]-[Object]- ...
- 利用canvas图片剪切
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...
- SDOI 2016 征途 决策单调性
题目大意:有一个数列,将其分成m段,求最小方差 先弄出n^3的dp,打出决策点,然后发现决策点是单调递增的,决策单调性搞一搞就可以了 #include<bits/stdc++.h> #de ...
- 电子商务网站SQL注入项目实战一例
故事A段:发现整站SQL对外输出: 有个朋友的网站,由于是外包项目,深圳某公司开发的,某天我帮他检测了一下网站相关情况. 我查看了页面源代码,发现了个惊人的事情,竟然整站打印SQL到Html里,着实吓 ...
- SSDB:高性能数据库服务器
SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下 ...
- SVG学习备忘录
最近在写一个基于SVG的前端流程图\拓扑图图形框架. 一些容易忽略的问题备忘如下: 1.JS添加SVG元素需要使用document.createElementNS("http://www.w ...