consumer in Java

A Consumer is a functional interface that accepts a single input and returns no output. 
```
import java.util.function.Consumer;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Consumer<String> printer = t -> System.out.println(t);
        Stream<String> names = Stream.of("a", "b", "c");
        names.forEach(printer);
    }
}
```
Consumer interface has two methods:
Method | Meaning
----- | -----
void accept(T t); | is the Single Abstract Method (SAM) which accepts a single argument of type T. 
default Consumer<T> andThen(Consumer<? super T> after); | is a default method used for composition.

```
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("a", "b", "c", "d");

        Consumer<List<String>> upperCaseConsumer = list -> {
            for (int i = 0; i < list.size(); i++) {
                list.set(i, list.get(i).toUpperCase());
            }
        };
        Consumer<List<String>> printConsumer =
                list -> list.stream().forEach(System.out::println);

        upperCaseConsumer.andThen(printConsumer).accept(names);
    }
}
```