Browse Clojure Foundations for Java Developers

Java Before and After Java 8 (Compared)

Relate loops, lambdas, and Streams to Clojure's simpler function-and-data pipeline style.

If you learned Java before Java 8, “functional style” likely arrived as a retrofit: anonymous classes, then lambdas, then Streams. Clojure starts from the other direction: immutable data plus small composable functions are the default, not an optional layer.

What transfers well from Java

  • The idea of passing behavior as a value (lambdas).
  • Thinking in pipelines (Streams).
  • Separating “what to do” from “how to iterate”.

What changes in Clojure

  • Persistent immutable collections change how you think about intermediate results.
  • Many operations are lazy by default (which can be a feature or a footgun).
  • There is less framework ceremony: you mostly combine plain functions.

The goal of this section is to help you keep the useful intuition from Java while avoiding “Streams in Lisp syntax” code that fights Clojure’s strengths.

In this section

Revised on Friday, April 24, 2026