In this article, we’ll go through the Java Stream map() method through detailed examples.
1. Java Stream Map Method Overview
The stream.map()
method is used to transform an object or primitive into something else. The syntax of this method is the following:
Stream<Object_type_or_primitive> map(Function<? extends type_of_stream, Object_type_or_primitive variable>)
The function could have one of the following syntaxes:
1.1 One-Line Lambda
a_variable -> transformed_variable_to_another_object
The transformed_variable_to_another_object
must be one line of code and it should transform the object into something else. This can be done either by calling a method of the a_variable
or calling another method that accepts a_variable
and returns something else.
1.2 Method Reference
Object_class_::a_method
This can replace the previous syntax in many cases and the result will be the same.
1.3 Multiline Lambda
a_variable -> { lines_of_code; ... return transformed_variable_to_another_object; }
The above will perform some operations before it returns the new object. Note that this cannot be replaced by method reference without calling an external method.
2. Java Stream Map Method Example With Lambda or Method Reference
Let’s say we have a list of article objects, the article record is the following:
private static record Article (int id, String title, String authorName){};
And we have a list of these articles:
Article forLoop = new Article( 1, "For Loop Java Tutorial", "Dimitris Tasios" ); Article interfaceTutorial = new Article( 2, "Java Interface Tutorial", "Georgios - Nikolaos Palaiologopoulos" ); Article generics = new Article( 3, "Java Generics Tutorial", "Ignis Dei" ); Article mathRandom = new Article( 4, "Math.random Java Tutorial", "Georgios - Nikolaos Palaiologopoulos" );
Now let’s say we’d like to have a list of the titles of the articles only. This can be achieved by mapping the article object to the string attribute authorName.
public static List<String> mapToTitle(List<Article> articles){ return articles.stream() .map(Article::title) .collect(Collectors.toList()); // return articles.stream() // .map(article -> article.title()) // .collect(Collectors.toList()); }
The first return uses the Method Reference Operator (::); this is exactly like the second return which is commented but is more concise. However, as it has already been mentioned, it has its limitations as it cannot be applied to perform inline additional transformations without relying on a method to do it for you. For example, the following cannot be replaced with a method reference.
return articles.stream() .map(article -> article.title().toUpperCase()) .collect(Collectors.toList());
3. Java Stream Map Method Example With Multiple Lines of Code
Furthermore, you can write multiple lines inside a lambda function in the map method; for example, we might like to print something before we transform the articles into article titles:
public static List<String> mapToTitleAndPrint(List<Article> articles){ return articles.stream() .map(article -> { System.out.println("This article is written by: " +article.authorName()); return article.title(); }) .collect(Collectors.toList()); }
The above method will print:
This article is written by:Dimitris Tasios This article is written by:Georgios - Nikolaos Palaiologopoulos This article is written by:Ignis Dei This article is written by:Georgios - Nikolaos Palaiologopoulos
and transform the article object to the article title.
4. Conclusion
By now you should know how to use the stream.map()
method of Java Stream API. You can find the source code on our GitHub page.