其实为了更好的使用lamda表达式,java在jdk1.8之后也添加了内置四大核心的函数式接口。什么是函数式接口以及lambda表达式可以看前面一篇 地址

Java内置的四大核心函数式接口如下:

函数式接口 参数类型 返回值 意义
Consumer<T> T void 对类似为T的对象应用才做,包含方法void accept(T t)
Supplier<T> T 返回类型为T的对象,包含方法:T get()
Function<T,R> R T 对类型为T的对象应用操作,并返回结果。结果是R的对象,包含的方法 R.apply(T t)
Predicate<T> T boolean 确定类型为T的对象是否满足某约束,并返回boolean值。包含方法:boolean test(T t)

这四大核心的函数式接口,说白就是为何跟上其他语言的lambda表达式而诞生的,而且其可以使用方法引用(上一篇聊过)

对于这四大核心的函数式接口,简单立即就是定义了一个标准,只要实现了这个接口,按照其要求写即可。不要纠结为什么这样写,因为接口本质就是定义了一个标准而已。

Consumer<T> 消费型接口,返回值 void

这个看名字就知道式一个消费型接口

现在看源码:(后面不在黏贴,毕竟意义不大)

/** Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/
package java.util.function;import java.util.Objects;/*** Represents an operation that accepts a single input argument and returns no* result. Unlike most other functional interfaces, {@code Consumer} is expected* to operate via side-effects.** <p>This is a <a href="package-summary.html">functional interface</a>* whose functional method is {@link #accept(Object)}.** @param <T> the type of the input to the operation** @since 1.8*/
@FunctionalInterface
public interface Consumer<T> {/*** Performs this operation on the given argument.** @param t the input argument*/void accept(T t);/*** Returns a composed {@code Consumer} that performs, in sequence, this* operation followed by the {@code after} operation. If performing either* operation throws an exception, it is relayed to the caller of the* composed operation.  If performing this operation throws an exception,* the {@code after} operation will not be performed.** @param after the operation to perform after this operation* @return a composed {@code Consumer} that performs in sequence this* operation followed by the {@code after} operation* @throws NullPointerException if {@code after} is null*///   1 :default方法某默认实现,不属于抽象方法//  2 :接口重写了Object的公共方法也不算入内default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}
}

简单的代码演示

public class test {public static void main(String[] args) {//    写法1  传统写法Consumer<Double> consumer=new Consumer<Double>() {@Overridepublic void accept(Double num) {System.out.println("写法1  输入的数字值是:"+num);}};getName(12.3,consumer);// 写法2:lambda表达式Consumer<Double> consumer1=  num-> System.out.println("写法2  输入的数字值是:"+num);getName(12.3,consumer1);//   写法3  方法引用Consumer<Double> consumer2=  System.out::println; getName(12.3,consumer2);}public static void getName(Double num,Consumer<Double> consumer) {consumer.accept(num);}}

Predicate<T> 断定型接口,返回值 boolean

代码演示

public class test {public static void main(String[] args) {String[] arr= {"张国立","成龙","李连杰","张彻","张三","甄子丹"};
//   要求将数组中的名字带张的人放入一个list中
//  方法1  传统方式Predicate<String> predicate=new Predicate<String>() {@Overridepublic boolean test(String t) {if (t.contains("张")) {return true;}return false;}};getList(arr,predicate);//  方法2  lambda表达式 Predicate<String> predicate1= t->{if (t.contains("张")) {return true;}return false;};getList(arr,predicate1);//   或者结合三目运算符predicate1= t->{return  t.contains("张") ?  true:  false;};getList(arr,predicate1);// 不过t.contains("张") 本身就返回boolen值了predicate1= t->{return  t.contains("张");};// 也可以省略 return    predicate1= t-> t.contains("张");getList(arr,predicate1);//  方法3  方法引用  根据前面的总结 这个方法暂时无法写}// public static public static void getList(String[] arr,Predicate<String> predicate) {List<String> zlist=new ArrayList<String>();for (String s:arr) {if(predicate.test(s)) {zlist.add(s);}}System.out.println(zlist);}}

Supplier<T>,供给型接口,返回值 T

返回一个对象。

public class test {public static void main(String[] args) {//  方法1  传统方式Supplier<String> supplier =new Supplier<String>() {@Overridepublic String get() {return "看自己需求写返回的对象";}};getString(supplier);//    方法2  lambda表达式Supplier<String> supplier1 =() -> {return "看自己需求写返回的对象";};//也可以这样写 Supplier<String> supplier1 =() ->  "看自己需求写返回的对象";lambda会自动添加retrun getString(supplier1);}public static void getString(Supplier<String> supplier) {System.out.println(supplier.get());}
}

Function<T, R> 函数型接口,返回值 R


public class test{public static void main(String[] args) {ObJ obj=new ObJ("张三",12);
//  方法1  传统方式Function<ObJ, String> function=new Function<ObJ, String>() {@Overridepublic String apply(ObJ obj) {// TODO Auto-generated method stubreturn obj.getName();}};getFunc(obj,function);//    方法2  lambda表达式Function<ObJ, String> function1 =  zobj-> { return zobj.getName();};//也可以这样写 Function<ObJ, String> function1 =  zobj-> zobj.getName(); lambda会自动添加retrun getFunc(obj,function1);}public static void getFunc(ObJ obj, Function<ObJ, String> function) {System.out.println(function.apply(obj));  }
}class ObJ{private String name;private int age;public ObJ(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

这四个本篇只是写了几个简单应用,后面在弄一些应用场景。所以先了解使用过程。

Java基础之四大核心函数式接口简单使用相关推荐

  1. java自带函数_java8中内置的四大核心函数式接口

    java8中内置的四大核心函数式接口 Consumer:消费型接口 void accept(T t) //Consumer 消费型接口 public void happy(double money, ...

  2. java8四大核心函数式接口(模拟实现,全网最通俗易懂)

    前言,如果不精通lamda表达式,请观看文章https://blog.csdn.net/wwwwwww31311/article/details/113116327 一.消费者接口 经典案例代码,怎么 ...

  3. java 内置函数_java8 四大内置核心函数式接口

    其他补充接口: 一.Consumer:消费型接口(void accept(T t)) 来看一个简单得例子: 1 /** 2 * 消费型接口Consumer 3 */ 4 @Test 5 public ...

  4. comparator接口_8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理

    我是风筝,公众号「古时的风筝」.一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  5. java8的4大核心函数式接口

    //java8的4大核心函数式接口//1.Consumer<T>:消费性接口//需求:public void happy(double money, Consumer<Double& ...

  6. 面霸篇:高频 Java 基础问题(核心卷一)

    JVM.JRE.JDK 关系 Java 是解释执行么? 采用字节码的好处 JDK 1.8 之后有哪些新特性 构造器是否可以重写 wait() 和 sleep 区别 &和&&的区 ...

  7. Java基础篇(05):函数式编程概念和应用

    本文源码:GitHub·点这里 || GitEE·点这里 文章目录 一.函数式概念 二.函数与方法 三.JDK函数基础 1.Lambda表达式 2.函数式接口 四.Optional类 1.Null判断 ...

  8. Java新特性:Java8函数式接口与Lambda表达式(一)

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  9. java中的ackerman_java8的函数式接口

    函数式接口 就是在java8里允许你为一个接口(只有一个实现的,声明为FunctionalInterface注解的)实现一个匿名的对象,大叔感觉它与.net平台的委托很类似,一个方法里允许你接收一个方 ...

最新文章

  1. 使用runtime让button传递多个参数
  2. 谷歌TF2.0凌晨发布!“改变一切,力压PyTorch”
  3. 登录加密的前后端测试
  4. 清华大学《操作系统》(九):进程和线程
  5. 2018 年最受欢迎的15个顶级 Python 库
  6. 程序员面试金典——1.2原串翻转
  7. win10此电脑不见了_微软介绍 Win10 “重置此电脑”失败的解决方法 - 微软
  8. ubuntu 18.04安装php 7,如何在Ubuntu 18.04和16.04上安装PHP(7.3,7.2和7.0)?
  9. python所遇到的坑
  10. python学习笔记--Django入门二 Django 的模板系统
  11. Avalonia的Snoop
  12. 使用Vue制作幻灯片
  13. 《优柔有情人》读后感6000字
  14. NAS中的文件共享协议
  15. IOT-Studio 物联网应用开发实例
  16. Caché Global
  17. 爬取《斗破苍穹》小说
  18. form表单,账号注册实例
  19. RANSAC和SAC-IA
  20. 【论文速递】ISPRS2022 :一种新颖的结合几何语义信息的星载SAR数据三维定位方法

热门文章

  1. 计算机基本操作知识课本内容阅读,计算机基础知识及基本操作
  2. 用python可以免费下载音乐吗-使用python实现下载我们想听的歌曲,速度超快
  3. linux系统日志文件介绍
  4. C#毕业设计——基于C#+asp.net+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码)——学生信息管理系统
  5. Kettle 实现数据同步
  6. OUC2021秋-计算机网络-期末(回忆版)
  7. 全排列Permutation
  8. 基于bp的神经网络算法,bp神经网络是什么算法
  9. 实现对文件夹进行加密
  10. 局域网或外网Nexus私服下载安装仓库使用整理(Linux环境)这一篇足够