Using IntelliJ IDEA Live Templates to Simplify Java Stream Collectors
This article explains how to upgrade Java code to use lambda expressions and the Stream API, highlights the inconvenience of repeatedly writing collect(Collectors.toList()) calls, and shows how IntelliJ IDEA's Live Templates can automate common collector patterns to boost productivity.
We are upgrading Pondus production servers to a new version, migrating code to lambda expressions, streams, and the new date API, and using Nashorn for dynamic scripts.
The most useful feature is the new Stream API; collection operations are everywhere and streams improve readability.
However, streams only provide a few terminal operations like reduce and findFirst; most other operations require collect, with Collectors such as toList, toSet, joining, and groupingBy.
Example code filtering a string collection and collecting to a list:
stringCollection
.stream()
.filter(e -> e.startsWith("a"))
.collect(Collectors.toList());After migrating 300k lines, toList, toSet, and groupingBy are the most used terminal operations, leading to the wish that methods like .toList() could be directly on Stream.
IntelliJ IDEA offers Live Templates to address this. A Live Template is a shortcut for frequently used code snippets, e.g., typing sout expands to System.out.println() .
By creating Live Templates for common collectors, you can type .toList and have the IDE insert .collect(Collectors.toList()) automatically.
Steps to create templates: open Settings → Live Templates, add a new group “Stream”, add templates for .toList, .toSet, .join, .groupBy, set the context to Java → Other, and define the abbreviation and template text.
// Abbreviation: .toList
.collect(Collectors.toList())
// Abbreviation: .toSet
.collect(Collectors.toSet())
// Abbreviation: .join
.collect(Collectors.joining("$END$"))
// Abbreviation: .groupBy
.collect(Collectors.groupingBy(e -> $END$))The special variable $END$ places the cursor after expansion, allowing you to type the separator or key expression.
Enable “Add unambiguous imports on the fly” so IDEA automatically adds the import for java.util.stream.Collectors .
Using these templates dramatically speeds up writing stream code, and the article invites readers to share other useful Live Template examples.
Architect's Tech Stack
Java backend, microservices, distributed systems, containerized programming, and more.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.