// Created on savesnippets.com · https://savesnippets.com/6Ak4uxf3IvRmMM import java.util.function.*; class Demo { void example() { // Function — takes a T, returns an R Function len = String::length; System.out.println(len.apply("hello")); // 5 // Compose: andThen / compose Function upper = String::toUpperCase; Function lengthOfUpper = upper.andThen(len); System.out.println(lengthOfUpper.apply("Hi")); // 2 // Predicate — takes a T, returns boolean Predicate nonEmpty = s -> !s.isEmpty(); Predicate short_ = s -> s.length() < 10; var both = nonEmpty.and(short_); var either = nonEmpty.or(short_); var inverse = nonEmpty.negate(); System.out.println(both.test("hello")); // true // Consumer — takes a T, returns nothing (side effect) Consumer println = System.out::println; println.accept("hi"); // Supplier — takes nothing, returns a T (factory / lazy producer) Supplier uuids = java.util.UUID::randomUUID; System.out.println(uuids.get()); // BiFunction — two args BiFunction add = Integer::sum; System.out.println(add.apply(2, 3)); // 5 } }