在之前的一片博文 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"));
      }
  • 消费型接口 (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(""); }
      }
  • 供应型接口 (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());
      }
      }
  • 断言型接口 (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")); }
      }

  

  所以在Java 8中由于存在有以上的四个功能型接口,所以一般很少会由用户去定义新的函数式接口!

  

  

  

Java 8新特性-5 内建函数式接口的更多相关文章

  1. Java 8 新特性1-函数式接口

    Java 8 新特性1-函数式接口 (原) Lambda表达式基本结构: (param1,param2,param3) -> {代码块} 例1: package com.demo.jdk8; i ...

  2. Java 8 新特性:1-函数式接口

    (原) Java 8 新特性1-函数式接口 Lambda表达式基本结构: (param1,param2,param3) -> {代码块} Lambda表达式结构: (type1 arg1,typ ...

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

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

  4. Java JDK1.8新特性之四大函数式接口

    JDK 1.8的一些新特性 四大核心函数式接口(Consumer.Predicate.Supplier.Function),结合lambda表达式 import java.util.ArrayList ...

  5. Spring 4支持的Java 8新特性一览

    有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览S ...

  6. Java 8 新特性概述

    Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性.其中主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作 ...

  7. Java 8 新特性终极版

    声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...

  8. Java 8新特性前瞻

    快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...

  9. 【整理】Java 8新特性总结

    闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...

随机推荐

  1. 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节

    这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...

  2. 奇怪的UnexpectedRollbackException异常

    今天在使用一个原来常用的功能的时候,突然发现在某些场景下会报异常,内容如下: 通过断点调试发现一路都很顺畅,就是在从controller层返回前段的时候会报该异常,没办法,只能通过排除法定位问题,后来 ...

  3. dialog

    function showDialog(){ var $by = $(window), obj = $('.dialog'), brsW = $by.width(), brsH = $by.heigh ...

  4. 实例讲解 SQL 注入攻击

    这是一篇讲解SQL注入的实例文章,一步一步跟着作者脚步探索如何注入成功,展现了一次完整的渗透流程,值得一读.翻译水平有限,见谅! 一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试. ...

  5. final 评论ii

    按照演讲顺序 1.约跑app         约跑app,从界面的单调,到最后的final发布,实现界面的友好性,有了很大的提高.约跑app,如果在约定地点可以显示出,所在位置,以及约定地址.就可以达 ...

  6. 一鼓作气 博客--第八篇 note8

    0.,222] list[33] except IndexError as e : print('index error ') except ValueError as e : print('valu ...

  7. Linux上传下载文件快捷命令

    远程链接Linux(如SecrueCRT),要上传文件很下载文件到Linux服务器,只需要使用sz或者rz命令即可快速下载和上传文件了. 使用方法: 1.首先确保Linux服务器系统中安装了lrzsz ...

  8. 禁用nested loop join里的spool

    禁用nested loop join里的spool 转载自: https://blogs.msdn.microsoft.com/psssql/2015/12/15/spool-operator-and ...

  9. Python黑帽编程 3.5 DTP攻击

    Python黑帽编程 3.5 DTP攻击 在上一节,<Python黑帽编程 3.4 跨越VLAN>中,我们讨论了一般的VLAN中实施攻击的方法,这一节属于扩展内容,简单演示下Cisco特有 ...

  10. C#图片色彩的纠正-上

    WPF(C#)图片色彩的纠正-上 WPF(C#)图片色彩的纠正-下 前言 对图片进行色彩的纠正,其实与WPF是没有什么关系的,为什么标题又是“WPF(C#)图片色彩的纠正”呢,因为这些图片色彩的纠正功 ...