Consumer是java8提供的函数式接口之一,意思为消费者,接受参数而不返回值

void accept(T t);

default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}

方法示例

package jdk8.consumer;

import java.util.function.Consumer;

public class ConsumerTest {
public static void main(String[] args) { ConsumerTest consumerTest = new ConsumerTest();
consumerTest.arithmetic(, , System.out::println, System.out::println); Consumer<String> consumer = s -> System.out.println(s.toUpperCase());
consumer.accept("hello"); consumerTest.arithmetic1(, , System.out::println, (a) -> a = a + );
consumerTest.arithmetic1(, , System.out::println, (a) -> System.out.println(a * ));
// consumerTest.arithmetic1(4, 9, System.out::println, (a) -> a * 2); } public void arithmetic(int i, int s, Consumer<Integer> consumer, Consumer<Integer> consumer1) {
consumer1.accept(i * s);
consumer.accept(i + s);
} public void arithmetic1(int a, int b, Consumer<Integer> consumer, Consumer<Integer> consumer1) {
consumer.andThen(consumer1).accept(a + b);
}
}

这个是错误示例,(a) -> a * 2是编译不通过的,因为Consumer是没有返回值的,lambda一行的时候默认带return

Bad return type in lambda expression: int cannot be converted to void 错误信息 意思为返回类型错误,无法将int转为void

andThen是个嵌套方法,可以一直嵌套下去,顺序为先执行 accept 后执行参数里的 after.accpet

运行结果


HELLO

Consumer还有多个其他的接口,具体有以下几种,在使用函数式接口时,若有提供具体类型的接口,就尽量使用此接口,因为具体的类型指定可以避免装箱拆箱时所带来的额外资源消耗

BiConsumer    接收两个参数

IntConsumer    接收一个int参数

LongConsumer    接收一个long参数

DoubleConsumer    收一个double参数

ObjIntConsumer    接收两个参数  T,int

ObjLongConsumer    接收两个参数  T,long

ObjDoubleConsumer    接收两个参数  T,,double

												

Java函数式接口Consumer的更多相关文章

  1. Java常用函数式接口--Consumer接口andThen()方法使用案例(二)

    Java常用函数式接口--Consumer接口使用案例

  2. Java 函数式接口

    目录 Java 函数式接口 1. 函数式接口 1.1 概念 1.2 格式 1.3 函数式接口的使用 2. 函数式编程 2.1 Lambda的延迟执行 性能浪费的日志案例 使用Lambda表达式的优化 ...

  3. JAVA 8 函数式接口--Consumer

    从JDK8开始java支持函数式编程,JDK也提供了几个常用的函数式接口,这篇主要介绍Consumer接口.文本介绍的顺序依次为: 源码介绍 使用实例 jdk内对Consumer的典型使用 扩展类介绍 ...

  4. Java函数式接口

    函数式接口定义且只定义了一个抽象方法.函数式接口的抽象方法的签名称为函数描述符.Java 8的java.util.function包中引入了几个新的函数式接口. 1.Predicate java.ut ...

  5. Java 函数式接口 lambda

    import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class Demo1 { ...

  6. Java函数式接口Function

    Function 提供了一个抽象方法  R apply(T t) 接收一个参数 返回 一个值,还有两个默认方法和一个静态方法 compose 是一个嵌套方法,先执行before.apply() 得到运 ...

  7. Java函数式接口与Lambda表达式

    什么是函数式接口? 函数式接口是一种特殊的接口,接口中只有一个抽象方法. 函数式接口与Lambda表达式有什么关系? 当需要一个函数式接口的对象时,可以提供一个lambda表达式. package l ...

  8. Java8-四个函数式接口(Consumer,Supplier,Predicate,Function)

    Java8---函数式接口 Consumer---消费者(accept方法,Lambda与方法引用返回都是Consumer) Supplier---供给型(get方法,返回数据,与Optional可以 ...

  9. 常用的函数式接口Consumer接口练习字符串拼接输出

    题目 下面的字符串数组当中有多条信息,请按照格式"姓名: XX 性别: XX"的格式将信息打印出来,要求将 打印姓名的动作为第一个Consumer接口的Lambda实例,将打印性别 ...

随机推荐

  1. Windows下使用python库 curses遇到错误消息的解决方案

    在Windows系统下执行python应用时,有时会遇到错误信息: ModuleNotFoundError: No module named '_curses'. 然而查看Windows系统里pyth ...

  2. dumpkeys - 转储显示键盘翻译表

    总览 (SYNOPSIS) dumpkeys [ -hilfn1 -Sshape -ccharset --help --short-info --long-info --numeric --full- ...

  3. MFC (Combo-box control)下拉列表控件的使用

    1.可以选择,但无法编辑状态: 选择下拉框的属性中的类型(Type)参数——Drop List; 2.如何控制Combo Box的下拉长度 1,一.在资源文件中打开对话框,选中Combo Box控件, ...

  4. java根据freeMark模板生成内容

    根据ftl模板生成文件内容可以用来生成代码模板,如下所示: aa.ftl name : ${name} age : ${age} aa.java package mall_tools; import ...

  5. java 数据库

    1.数据的概述 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材. 数据是信息的表现形式和载体,可以是符号.文字.数字.语音.图像.视频等.数据和信 ...

  6. Django生成二维码

    1. 安装 pip install qrcode 安装Image包 pip install Image 1.1 在代码中使用 import qrcode img = qrcode.make('输入一个 ...

  7. Nginx 跨域

    if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access- ...

  8. Android发布apk后解决百度地图不显示的问题

    今天在做Android apk发布时,发现发布后不能显示百度地图,结合网上的信息,及自己的实验,终于可以了.原来在Eclipse上直接run的是测试版本,而发布后是运行版本,两个版本的SHA1值不一样 ...

  9. Python+selenium(定位一组元素)

    我们熟知Webdriver有8种定位元素的方法,但是当需要定位一组元素的时候,可以使用Webdriver提供的与之对应的8种用于定位一组元素的方法,分别是: find_elements_by_id() ...

  10. python3--产生偏移和元素:enumerate

    之前,我们讨论过通过range来产生字符串中元素的偏移值.而不是那些偏移值处的元素.不过,在有些程序中.我们两者都需要,要用的元素以及值个元素的偏移值.从传统意义来讲,这是简单的for循环,他同时也持 ...