Overview

Java 8 provides lambda expressions, which are very handy for functional programming:

people.stream().map(p->p.name())

They are particularly useful for filtering and transforming immutable value objects,
but many programmers, due to customer requirements or other reasons, cannot use Java 8. Guava provides many of the functional capabilities of Java 8 using their Function and Predicate interfaces:

However, without lambdas, writing Functions and Predicates is verbose and often results in functional code less clear than its imperative equivalent.

Generate functions and predicates

With org.immutables:func, you can easily generate Guava Functions and Predicates for field access without the clutter. Special class *Functions is generated and provides function and predicate instances.