java8 函数编程Consumer使用详解

位置:首页>文章>详情   分类:Java教程   阅读(603)   2023-03-28 11:29:14

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://www.leftso.com/article/1013.html