Java8 Consumer&BiConsumer使用

Wesley13
• 阅读 843

java8里面consumer&BiConsumer也是函数式接口,从代码上看,consumer只有一个入参,没有返回值;BiConsumer两个入参,没有返回值。

1、Consumer简单例子

package com.cattles.function;

import java.util.function.Consumer;

/**
 * @author cattle -  稻草鸟人
 * @date 2020/4/12 下午3:04
 */
public class Java8Consumer1 {

    public static void main(String[] args) {
        Consumer<String> stringConsumer = x -> System.out.println("hello!" + x);
        stringConsumer.accept("cattle");
    }
}

输出:

hello!cattle

2、Consumer当做参数传输

package com.cattles.function;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

/**
 * @author cattle -  稻草鸟人
 * @date 2020/4/12 下午3:13
 */
public class Java8Consumer2 {

    public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
        Consumer<Integer> integerConsumer = x -> System.out.println(x);
        forEach(integers, integerConsumer);
        System.out.println("===========");
        forEach(integers, x -> System.out.println(x));
    }

    static <T> void forEach(List<T> list, Consumer<T> consumer) {
        list.forEach(consumer);
    }
}

输出:

1
2
3
4
5
6
7
8
===========
1
2
3
4
5
6
7
8

3、BiConsumer简单例子

package com.cattles.function;

import java.util.function.BiConsumer;

/**
 * @author cattle -  稻草鸟人
 * @date 2020/4/12 下午3:20
 */
public class Java8BiConsumer1 {
    public static void main(String[] args) {
        BiConsumer<Integer, Integer> add = (x, y) -> System.out.println(Math.addExact(x, y));
        add.accept(1, 2);
    }
}

输出

3

4、BiConsumer当做参数传输

package com.cattles.function;

import java.util.function.BiConsumer;

/**
 * @author cattle -  稻草鸟人
 * @date 2020/4/12 下午3:23
 */
public class Java8BiConsumer2 {

    public static void main(String[] args) {
        add(1, 2, (x, y) -> System.out.println(x + y));
        add("Hello!", "Cattle", (x, y) -> System.out.println(x + y));
    }

    static <T> void add(T a, T b, BiConsumer<T, T> c) {
        c.accept(a, b);
    }
}

输出:

3
Hello!Cattle

5、Map.forEach例子

在第2点,consumer当做参数例子里面,我们发现list的forEach代码参数是Consumer,而map里面的forEach参数则使用的是BiConsumer,下面我们看下例子

package com.cattles.function;

import java.util.HashMap;

/**
 * @author cattle -  稻草鸟人
 * @date 2020/4/12 下午3:30
 */
public class Java8BiConsumer3 {

    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "Java");
        map.put(2, "Kotlin");
        map.put(3, "React");
        map.put(4, "Python");
        map.put(5, "Go");
        map.forEach((k, v) -> System.out.println(k + ":" + v));
    }
}

输出:

1:Java
2:Kotlin
3:React
4:Python
5:Go
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java 面试知识点笔记(八)多线程与并发 中篇
问:如何给run()方法传参?1.构造函数传参2.成员变量传参3.回调函数传参问:如何实现处理线程的返回值?1.主线程等待法(实现简单,缺点是需要自己写等待逻辑,当等待变量多时代码臃肿,而且无法明确等待时间,无法精准控制。不推荐使用)1.!(https://oscimg.oschina.net
Wesley13 Wesley13
3年前
Java 8 Supplier 使用
Java8Supplier使用在Java8,Supplier是一个函数接口,它没有参数,返回了一个T.查了下字典,supplier被翻译成"供应商",那么它到底供应了啥呢,从代码上看,就是供应了一个任意对象T呗,下面我们去看看几个DEMO吧.思考:写JDK代码的大神们,为什么取名叫Supplier?为
Wesley13 Wesley13
3年前
Java有陷阱,用时需谨慎——慎用入参做返回值
正常情况下,在Java中入参是不建议用做返回值的。除了造成代码不易理解、语义不清等问题外,可能还埋下了陷阱等你入坑。问题背景比如有这么一段代码:@NamedpublicclassAService{privateSupplyAssignmentlocalSupplynewSupplyAssignment();
Wesley13 Wesley13
3年前
Java有陷阱——慎用入参做返回值
正常情况下,在Java中入参是不建议用做返回值的。除了造成代码不易理解、语义不清等问题外,可能还埋下了陷阱等你入坑。问题背景比如有这么一段代码:@NamedpublicclassAService{privateSupplyAssignmentlocalSupplynewSupplyAs
Wesley13 Wesley13
3年前
Java8—一万字的Lambda表达式的详细介绍与应用案例
  基于Java8详细介绍了lambda表达式的语法与使用,以及方法引用、函数式接口、lambda复合等Java8的新特性!文章目录1Lambda的概述2函数式接口2.1Consumer消费型接口2.2Supplier供给型接口2.3Function<T,R函数型接口
Wesley13 Wesley13
3年前
Java陷阱——慎用入参做返回值
正常情况下,在Java中入参是不建议用做返回值的。除了造成代码不易理解、语义不清等问题外,可能还埋下了陷阱等你入坑。问题背景比如有这么一段代码:@NamedpublicclassAService{privateSupplyAssignmentlocalSupplynewSupplyAs
Wesley13 Wesley13
3年前
Java有陷阱,用时需谨慎——慎用入参做返回值
正常情况下,在Java中入参是不建议用做返回值的。除了造成代码不易理解、语义不清等问题外,可能还埋下了陷阱等你入坑。问题背景比如有这么一段代码:@NamedpublicclassAService{privateSupplyAssignmentlocalSupplynewSupplyAs
Wesley13 Wesley13
3年前
Java8 新特性 函数式接口
什么是函数式接口  函数式接口是Java8引用的一个新特性,是一种特殊的接口:SAM类型的接口(SingleAbstractMethod)。但是它还是一个接口,只是有些特殊罢了。  函数式接口的出现主要是为了配合Java8的另一个新特性Lamdba表达式来使用。接口中只有一个抽象方法接口
Stella981 Stella981
3年前
Python中函数装饰器及练习
1)装饰器的理解:1、作用:在不改变原函数的基础上,给函数增加功能   2、返回值:把一个函数当作参数,返回一个替代版的函数3、本质:返回函数的函数4、应用场景:计时器、记录日志、用户登陆认证、函数参数认证2)无参函数装饰器  实例:被装饰的函数没有参数     执行结果为: