How to convert a List of Lists to a List in Java 8

In this section, we will show you how to convert a List<List<Object>> to a List<Object> in Java 8 using Stream API.

Following ways can be used for converting List<List<Object>> to a List<Object>

1. By using flatMap () method 
2. By using forEach () method
3. By using mapMult () method


Example 1: Use flatMap () method

Java 8 Stream flatMap () method is used to flatten a Stream of collections to a stream of objects. The objects are combined from all the collections in the original Stream. Flattening is referred to as merging multiple collections/arrays into one.

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class Main {

// Driver code
public static void main(String[] args)
{
//Creating List of Lists
List<List<String>> listOfLists = Collections.
singletonList(Arrays.
asList("Java", "Go", "python", "kotlin"));

/*
Use flatMap to flatten the internal lists
(after converting them to Streams) into a single Stream,
and then collect the result into a list:use flatMap
to flatten the internal lists (after converting them to Streams)
into a single Stream, and then collect the result into a list:
*/
List<String> list = listOfLists.stream().
flatMap(List::stream).collect(Collectors.toList());

System.out.println("listOfLists => " + listOfLists);
System.out.println("list => " + list);

}

}

Console Output:
listOfLists => [[Java, Go, python, kotlin]]
list => [Java, Go, python, kotlin]

Example 2: Use forEach () method

The forEach method performs the specified action on each element of an iterable object until all elements are processed, or the action throws an exception.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {

// Driver code
public static void main(String[] args)
{
//Creating List of Lists
List<List<String>> listOfLists = Collections.
singletonList(Arrays.
asList("Java", "Go", "python", "kotlin"));

List<Object> list = new ArrayList<>();

//List is Iterable, this code calls the
// forEach method (Java 8 feature),
// which is inherited from Iterable.
listOfLists.forEach(list::addAll);

System.out.println("listOfLists => " + listOfLists);
System.out.println("list => " + list);

}

}

Console Output:
listOfLists => [[Java, Go, python, kotlin]]
list => [Java, Go, python, kotlin]

Example 3: Since java-16, we can use mapMulti () method

Java 16 introduces a new Stream.mapMulti method which allows us to replace elements in a stream with multiple elements.

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class Main {

// Driver code
public static void main(String[] args)
{
//Creating List of Lists
List<List<String>> listOfLists = Collections.
singletonList(Arrays.
asList("Java", "Go", "python", "kotlin"));


List<String> list = listOfLists.stream()
.mapMulti((List<String> r, Consumer<String> consumer) -> {
r.forEach(consumer::accept);
})
.collect(Collectors.toList());

System.out.println("listOfLists => " + listOfLists);
System.out.println("list => " + list);

}

}

Console Output:
listOfLists => [[Java, Go, python, kotlin]]
list => [Java, Go, python, kotlin]

More related topics,

Comments

Popular posts from this blog

Spring Boot OpenAI Integration: Step-by-Step Guide

Orchestration-Based Saga Architecture and Spring Boot Microservices Implementation Guide

Spring Boot 3 + Angular 15 + Material - Full Stack CRUD Application Example