Java函数式接口Consumer

2019-05-22 06:31:00来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

 



 


原文链接:https://www.cnblogs.com/chengmi/p/10891746.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:包装类Float中为什么有两个常量来表示最小值

下一篇:Android 学习路线图(转载自https://blog.csdn.net/lixuce1234/a