Consumer接口和Supplier接口
继上回讲完函数式接口后,这次来了解下消费型接口和供给型接口:即Consumer和Supplier接口;
首先从Consumer接口开始:
Comsumer:
这个接口里面有两个方法,一个叫accept,一个叫andThen;
(1)accept:
在创建一个消费型的实现类时,要传入一个泛型参数,这个泛型参数也是accept的接受参数类型,如下例代码:
public class Main {public static void main(String[] args) {//创建一个实现类,并实现其方法,注意这里需要指明泛型。Test("lbwnb", new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println("说得好:" + s); //说得好:lbwnb}});}//创建一个接受消费实现类的静态方法,在里卖弄直接调用里面的accept函数public static void Test(String data,Consumer<String> consumer){consumer.accept(data);}}
消费型接口有一个显然得特点:有来无回。它接受一个参数,在里面执行一些操作,执行完过后是没有返回值的。
(2)andThen:
这个方法也与Function接口的andThen相似,也就是你传入的另外一个方法的执行顺序,下面来看示例:
public class Main {public static void main(String[] args) {Consumer<String> consumer1=new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println("小明说:"+s);}};Consumer<String> consumer2=new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println("小红说:"+s);}};//小明说:lbwnb//小红说:lbwnbconsumer1.andThen(consumer2).accept("lbwnb");}
}
这个方法允许对传入的数据进行操作,但是要注意,只是对数据源进行操作,如果你的操作并不会直接或者间接改变数据源,那很遗憾,你第一个操作不会影响到操作二的数据。
Supplier:
这个接口相对来说理解就更加的简单,因为它只有一个方法:get()。这个方法没有参数传入,只有返回值,有小伙伴就疑问了,没有参数传入,那岂不是返回的数值是一个定值咯,其实不然,只要你合理运用就会有奇特的效果。
下面来看代码:
先创建一个Student类,给每个字段配上getter,setter。并且重写toString方法。
public class Student {private String name;private Integer age;public Student(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}//重写toString方法@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
然后开始使用:
public class Main {public static void main(String[] args) {//创建学生列表,并添加数据。List<Student> students=new ArrayList<>();students.add(new Student("lbw",18));students.add(new Student("小刚",17));students.add(new Student("小红",26));students.add(new Student("小川",13));students.add(new Student("李华",19));//调用方法--返回已成年的学生列表Test(students).forEach(e->{System.out.println(e);});}public static List<Student> Test(List<Student> list){Supplier<List<Student>> supplier=new Supplier<List<Student>>() {@Overridepublic List<Student> get() {//创建一个返回列表List<Student> res= new ArrayList();//将年龄大于等于18的加入列表list.forEach(e->{if(e.getAge()>=18){res.add(e);}});//返回列表return res;}};return supplier.get();}
}
这个例子中,它主要是利用作用域特点的方式来获取外界的值(传入学生列表,对列表进行滤)。有人就问,我为啥直接不省去这个接口实现类,直接将逻辑写在里面,但是你得考虑它的万一有复杂的逻辑,或者其他需求呢。还有就是我这只是一个小demo,别较真。真的有用的,就算你不会直接用,但有些内置方法它就是要求你去传入一个Supplier实现类。
好,本次的介绍就到这儿,有啥不懂得可以评论一起探讨学习,有不正确得欢迎指正。
Consumer接口和Supplier接口相关推荐
- JAVA8之函数式编程Supplier接口和Consumer接口
JAVA8之函数式编程Supplier接口和Consumer接口 一. Supplier接口 顾名思义,这是一个供应商,提供者.就如一个工厂一样.该类的源码如下: package java.ut ...
- Java基础二十二:函数式接口介绍,函数式接口作为方法参数、返回值,Supplier接口、Consumer接口、Predicate接口、Function接口基本介绍及其案例小练习
函数式接口 1. 函数式接口概念及基本使用 1.函数式接口:有且仅有一个抽象方法的接口,函数式接口就是Lambda表达式使用的前提 2. Java中的函数式编程体现的就是Lambda表达式,所以函数式 ...
- java 接口函数_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
- java supplier接口_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
- 【Java 进阶】匿名类(代码传递、回调、过滤器)、Lambda表达式(方法引用)、函数式接口(Supplier、Consumer、Predicate、Function)
匿名类 匿名类(Anonymous Class) 匿名类的使用注意 匿名类 - 代码传递 - 测试代码运行时间的工具类 匿名类 - 回调 - 简易网络请求 匿名类 - 过滤器 - 获取目录下的所有文件 ...
- java8 supplier_Java8 Supplier接口和Consumer接口原理解析
Supplier接口 package java.util.function; /** * Represents a supplier of results. * * There is no requi ...
- 【java笔记】常用函数式接口(1):Supplier接口
[java笔记]常用接口(2):Consumer接口_m0_52043808的博客-CSDN博客 [java笔记]常用函数式接口(3):Predicate接口_m0_52043808的博客-CSDN博 ...
- Supplier JAVA_Java基础学习之函数式编程Supplier接口(JDK8)
前言 今天带大家领略一下Supplier接口大道至简的魅力. 1.源码 @FunctionalInterface public interface Supplier { /*** Gets a res ...
- 常用函数式接口之Supplier
Supplier接口 Supplier<T>接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据供我们使用. 常用方法 只有一个无参的方 ...
最新文章
- python语言标识符首字符不能是_Python语言标识符的命名规定,首字符不能是( )...
- RecyclerView优秀文集
- 用CORS 解决vue.js django跨域调用
- Ubuntu安装 AndroidStudio
- eclipse中去掉警告提示
- 用python批量下载网络图片_python批量下载图片的三种方法
- 新款iPhone SE发布日期曝光:小屏果粉早已按捺不住
- python财务管理
- 35. 内容协商和转码
- wget通过代理上网办法
- ssh遇到密钥更改问题
- Windows环境下使用UHD PythonAPI开发USRP X310
- c盘减肥//请在阅读本文之前查看你C盘的可用空间
- 审车的时候环保怎样安全通过_审车环保3次不过怎么办,年检尾气不合格怎么办...
- Android系统体系结构
- IT 行业中Dev、RD、CPO、TeamLeader、QA、PM、PO ,HC,TL 分别是什么的简称,他们分别对应的职责是什么?
- 森林防火无线监控系统解决方案
- el-date-picker 日期过滤周末节假日
- css鼠标点击后取消光标焦点,光标设置透明
- HMaster因zookeeper连接超时自杀