当前位置: 移动技术网 > IT编程>开发语言>Java > Java函数式接口Consumer

Java函数式接口Consumer

2019年05月20日  | 移动技术网IT编程  | 我要评论

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

 



 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网