java8 函数编程Consumer使用详解

Consumer 源码

package java.util.function;

import java.util.Objects;


@FunctionalInterface
public interface Consumer<T> {


    void accept(T t);


    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

从源码来看,Consumer函数主要有两个方法,accept和andThen。

accept 用于接受函数参数,注意Consumer函数不会返回任何值,可理解为委托处理。
andThen 用于链接多个函数执行

Consumer 使用

演示一

建立演示方法:

    public static void t1(){
        Consumer<Integer> cal=x-> {
            x=x*10;
            System.out.println(x);
        };
        cal.accept(20);
    }

执行结果:

200

 

演示二

创建一个car汽车类

/**
 * 汽车
 */
public class Car {

   private String name;
   private String company;
    /**
     * 设置名称并返回当前对象
     * @param name
     * @return
     */
    public Car setName(String name){
        this.name=name;
        return this;
    }

    /**
     * 设置公司并返回当前类
     * @param company
     * @return
     */
    public Car setCompany(String company){
        this.company=company;
        return this;
    }

    @Override
    public String toString() {
        return "name:"+name+" company:"+company;
    }
}

创建演示方法:

    public static void t2(Consumer<Car> consumer){
        Car car=new Car();
        consumer.accept(car);
        System.out.println(car.toString());
    }

    public static void main(String[] args) {

        t2(Car->Car.setName("长安cs 85").setCompany("长安"));

    }

执行结果:

name:长安cs 85 company:长安

演示三

    public static void t3(){
        Consumer<Car> setNameFn=car -> {car.setName("长城H6汽车");};
        Consumer<Car> setCompanyFn=car -> {car.setCompany("长城公司");};
        Car car1=new Car();
        setNameFn.accept(car1);
        System.out.println(car1);

        Car car2=new Car();
        //使用andThen链接多个函数执行
        setNameFn.andThen(setCompanyFn).accept(car2);
        System.out.println(car2);
    }

执行结果:

name:长城H6汽车 company:null
name:长城H6汽车 company:长城公司

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/243558.html

(0)
上一篇 2022年4月11日 21:16
下一篇 2022年4月11日 21:16

相关推荐

发表回复

登录后才能评论