Cursor-rules-java 142-java-functional-programming
Use when you need to apply functional programming principles in Java — including writing immutable objects and Records, pure functions, functional interfaces, lambda expressions, Stream API pipelines, Optional for null safety, function composition, higher-order functions, pattern matching for instanceof and switch, sealed classes/interfaces for controlled hierarchies, Stream Gatherers for custom operations, currying/partial application, effect boundary separation, and concurrent-safe functional patterns. Part of the skills-for-java project
git clone https://github.com/jabrena/cursor-rules-java
T=$(mktemp -d) && git clone --depth=1 https://github.com/jabrena/cursor-rules-java "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/142-java-functional-programming" ~/.claude/skills/jabrena-cursor-rules-java-142-java-functional-programming && rm -rf "$T"
skills/142-java-functional-programming/SKILL.mdJava Functional Programming rules
Identify and apply functional programming principles in Java to improve immutability, expressiveness, and maintainability.
What is covered in this Skill?
- Immutable objects and Records (JEP 395)
- Pure functions free of side effects
- Functional interfaces:
,Function
,Predicate
,Consumer
, customSupplier@FunctionalInterface - Lambda expressions and method references
- Stream API: filter/map/reduce pipelines, parallel streams,
collectorstoUnmodifiable*
idiomatic usage:Optional
/map
/flatMap
/filter
overorElse*
+isPresent()get()- Function composition:
/andThencompose - Higher-order functions: memoization, currying, partial application
- Pattern Matching for
andinstanceof
(Java 21)switch - Sealed classes and interfaces (Java 17) for exhaustive domain hierarchies
- Switch Expressions (Java 14), Stream Gatherers (JEP 461)
- Effect-boundary separation: side effects at edges, pure core logic
- Immutable collections:
,List.of()Collectors.toUnmodifiableList()
Scope: The reference is organized by examples (good/bad code patterns) for each core area. Apply recommendations based on applicable examples.
Constraints
Before applying any functional programming changes, ensure the project compiles. If compilation fails, stop immediately — do not proceed until the project compiles successfully. Verify that maven-compiler-plugin source/target supports the Java features being used.
- MANDATORY: Run
or./mvnw compile
before applying any changesmvn compile - SAFETY: If compilation fails, stop immediately — do not proceed until the project compiles successfully
- VERIFY: Verify maven-compiler-plugin source/target supports the Java features being used
- VERIFY: Run
or./mvnw clean verify
after applying improvementsmvn clean verify - BEFORE APPLYING: Read the reference for detailed good/bad examples, constraints, and safeguards for each functional programming pattern
When to use this skill
- Improve the code with Functional Programming
- Apply Functional Programming
- Refactor the code with Functional Programming
Reference
For detailed guidance, examples, and constraints, see references/142-java-functional-programming.md.