Translate Java loops and object graphs into functions over immutable data and explicit boundaries.
Migration succeeds when you translate intent, not syntax. The “functional equivalent” of a Java design is usually not a new set of classes—it’s a data model plus a set of pure functions that transform it.
This section builds a mapping between familiar Java moves (mutable accumulators, strategy objects, builders) and idiomatic Clojure moves (pipelines, higher-order functions, maps/vectors). The goal is to keep side effects at the edge so the core remains easy to test.