Java8 Consumer&BiConsumer使用

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

1、Consumer简单例子

1package com.cattles.function; 2 3import java.util.function.Consumer; 4 5/** 6 * @author cattle - 稻草鸟人 7 * @date 2020/4/12 下午3:04 8 */ 9public class Java8Consumer1 { 10 11 public static void main(String[] args) { 12 Consumer<String> stringConsumer = x -> System.out.println("hello!" + x); 13 stringConsumer.accept("cattle"); 14 } 15} 16

输出:

hello!cattle

2、Consumer当做参数传输

1package com.cattles.function; 2 3import java.util.Arrays; 4import java.util.List; 5import java.util.function.Consumer; 6 7/** 8 * @author cattle - 稻草鸟人 9 * @date 2020/4/12 下午3:13 10 */ 11public class Java8Consumer2 { 12 13 public static void main(String[] args) { 14 List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); 15 Consumer<Integer> integerConsumer = x -> System.out.println(x); 16 forEach(integers, integerConsumer); 17 System.out.println("==========="); 18 forEach(integers, x -> System.out.println(x)); 19 } 20 21 static <T> void forEach(List<T> list, Consumer<T> consumer) { 22 list.forEach(consumer); 23 } 24} 25

输出:

11 22 33 44 55 66 77 88 9=========== 101 112 123 134 145 156 167 178 18

3、BiConsumer简单例子

1package com.cattles.function; 2 3import java.util.function.BiConsumer; 4 5/** 6 * @author cattle - 稻草鸟人 7 * @date 2020/4/12 下午3:20 8 */ 9public class Java8BiConsumer1 { 10 public static void main(String[] args) { 11 BiConsumer<Integer, Integer> add = (x, y) -> System.out.println(Math.addExact(x, y)); 12 add.accept(1, 2); 13 } 14} 15

输出

3

4、BiConsumer当做参数传输

1package com.cattles.function; 2 3import java.util.function.BiConsumer; 4 5/** 6 * @author cattle - 稻草鸟人 7 * @date 2020/4/12 下午3:23 8 */ 9public class Java8BiConsumer2 { 10 11 public static void main(String[] args) { 12 add(1, 2, (x, y) -> System.out.println(x + y)); 13 add("Hello!", "Cattle", (x, y) -> System.out.println(x + y)); 14 } 15 16 static <T> void add(T a, T b, BiConsumer<T, T> c) { 17 c.accept(a, b); 18 } 19} 20

输出:

13 2Hello!Cattle

5、Map.forEach例子

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

1package com.cattles.function; 2 3import java.util.HashMap; 4 5/** 6 * @author cattle - 稻草鸟人 7 * @date 2020/4/12 下午3:30 8 */ 9public class Java8BiConsumer3 { 10 11 public static void main(String[] args) { 12 HashMap<Integer, String> map = new HashMap<>(); 13 map.put(1, "Java"); 14 map.put(2, "Kotlin"); 15 map.put(3, "React"); 16 map.put(4, "Python"); 17 map.put(5, "Go"); 18 map.forEach((k, v) -> System.out.println(k + ":" + v)); 19 } 20} 21

输出:

11:Java 22:Kotlin 33:React 44:Python 55:Go
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 面试知识点笔记(八)多线程与并发 中篇

问:如何给run()方法传参?1.构造函数传参2.成员变量传参3.回调函数传参问:如何实现处理线程的返回值?1.主线程等待法(实现简单,缺点是需要自己写等待逻辑,当等待变量多时代码臃肿,而且无法明确等待时间,无法精准控制。不推荐使用)1.!(https://oscimg.oschina.net

Java 8 Supplier 使用

Java8Supplier使用在Java8,Supplier是一个函数接口,它没有参数,返回了一个T.查了下字典,supplier被翻译成"供应商",那么它到底供应了啥呢,从代码上看,就是供应了一个任意对象T呗,下面我们去看看几个DEMO吧.思考:写JDK代码的大神们,为什么取名叫Supplier?为

Java有陷阱,用时需谨慎——慎用入参做返回值

正常情况下,在Java中入参是不建议用做返回值的。除了造成代码不易理解、语义不清等问题外,可能还埋下了陷阱等你入坑。问题背景比如有这么一段代码:@NamedpublicclassAService{privateSupplyAssignmentlocalSupplynewSupplyAssignment();

Java有陷阱——慎用入参做返回值

正常情况下,在Java中入参是不建议用做返回值的。除了造成代码不易理解、语义不清等问题外,可能还埋下了陷阱等你入坑。问题背景比如有这么一段代码:@NamedpublicclassAService{privateSupplyAssignmentlocalSupplynewSupplyAs

Java8—一万字的Lambda表达式的详细介绍与应用案例

  基于Java8详细介绍了lambda表达式的语法与使用,以及方法引用、函数式接口、lambda复合等Java8的新特性!文章目录1Lambda的概述2函数式接口2.1Consumer消费型接口2.2Supplier供给型接口2.3Function<T,R函数型接口