andThen, compose, and, or, negate - build pipelines without loops
Multiple interface inheritance
Diamond problem and how default resolution rules solve it
Interface vs Abstract Class Decision Tree
Do you need STATE (fields)?
│
┌──────────┴──────────┐
YES NO
│ │
Abstract class Do you need CONSTRUCTORS
(can have fields, or non-public members?
constructors) │
┌────────┴────────┐
YES NO
│ │
Abstract class Interface
(multiple impl,
default methods)
Supplier<T> () → T "produce a value"
Consumer<T> T → void "consume a value"
Function<T,R> T → R "transform"
Predicate<T> T → boolean "test"
BiFunction<T,U,R> (T,U) → R "combine two"
UnaryOperator<T> T → T "transform same type"
BinaryOperator<T> (T,T) → T "reduce two to one"
Runnable () → void "run a block"