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(8, 9, system.out::println, system.out::println); consumer<string> consumer = s -> system.out.println(s.touppercase()); consumer.accept("hello"); consumertest.arithmetic1(4, 9, system.out::println, (a) -> a = a + 2); consumertest.arithmetic1(4, 9, system.out::println, (a) -> system.out.println(a * 2)); // 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
运行结果
72 17 hello 13 13 26
consumer还有多个其他的接口,具体有以下几种,在使用函数式接口时,若有提供具体类型的接口,就尽量使用此接口,因为具体的类型指定可以避免装箱拆箱时所带来的额外资源消耗
biconsumer 接收两个参数
intconsumer 接收一个int参数
longconsumer 接收一个long参数
doubleconsumer 收一个double参数
objintconsumer 接收两个参数 t,int
objlongconsumer 接收两个参数 t,long
objdoubleconsumer 接收两个参数 t,,double
如对本文有疑问, 点击进行留言回复!!
springmvc之ResponseBody响应json数据遇到的错误及解决
uni-app 后台升级 静默升级 uniapp 后台更新 静默更新 在线升级
SpringBoot多Module启动报错Could not transfer metadata
Hibernate项目报错:Cannot call sendError() after the response has been committed
网友评论