Java Stream How to - Combine method chain and Consumer functional interface








Question

We would like to know how to combine method chain and Consumer functional interface.

Answer

/* w  w w . java2s  .  co  m*/
import java.util.function.Consumer;

public class Main {

  public static void main(String[] args) {
    Mailer.send(mailer -> {
      mailer.to("to@example.com").from("from@exmaple.com")
          .subject("Some subject").body("Some content");
    });
  }
}

class Mailer {
  public Mailer to(String address) {
    System.out.println("To: " + address);
    return this;
  }

  public Mailer from(String address) {
    System.out.println("From: " + address);
    return this;
  }

  public Mailer subject(String sub) {
    System.out.println("Subject: " + sub);
    return this;
  }

  public Mailer body(String body) {
    System.out.println("Body: " + body);
    return this;
  }

  public static void send(Consumer<Mailer> mailerOperator) {
    Mailer mailer = new Mailer();
    mailerOperator.accept(mailer);
    System.out.println("Sending ...");
  }
}

The code above generates the following result.