Related Tags

communitycreator
java

How to flatten a stream of lists using a forEach loop in Java

Gutha Vamsi Krishna

Problem

Given a stream of lists in Java, the task is to flatten the stream using the forEach() method.

Example

Input: [ [1, 2], [3, 4, 5, 6], [7, 8, 9] ]

Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Solution

Here’s how we’ll go about doing this.

Approach

• Declare and initialize the list in 2D form.

• Declare an empty list to store flattened items.

• Use a forEach loop to convert each inner list in the outer list to a stream using the stream() method, and add it to the outer list.

• Convert the outer list to stream using the same stream() method.

• Flatten the stream into a list, using the collect() method, and store it in the empty list declared above.

• Print the unflattened and flattened list.

Implementation

Here’s the explanation of the code below:

• Lines 9 - 18: Creating a list arr from lists a, b, and c.

• Line 21: Declaring an empty list flatList, which will store the flattened elements.

• Line 24: Declaring an empty list streamList, which will store a stream of lists.

• Lines 27 - 30: Using the forEach loop to convert each list a, b, and c in arr to stream and storing it in streamList.

• Line 33: Converting streamList to stream and then flattening the streams using the collect() method, and assigning it to flatList.

• Line 36: Printing arr, the original 2D list.

• Line 37: Printing flatList, the flat list containing the flattened elements of the stream.

Code

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.*;

class Solution {
public static void main( String args[] ) {

//declare and initialize the lists that needs to be flattened
List<Integer> a = Arrays.asList(1, 2);
List<Integer> b = Arrays.asList(3, 4, 5, 6);
List<Integer> c = Arrays.asList(7, 8, 9);

//adding List<Integer> to another list arr
List<List<Integer> > arr = new ArrayList<List<Integer> >();

//declare a list that store flattened stream of lists
List<Integer> flatList = new ArrayList<Integer>();

//declare a list that contain streams
List<Integer> streamList = new ArrayList<>();

//for each loop to convert list in arr to stream and add the stream to streamList
for (List<Integer> list : arr) {
list.stream()
}

//flatten the stream using collect method
flatList = streamList.stream().collect(Collectors.toList());

//print the unflattenned and flattenned list repectively
System.out.println("Unflatenned stream: " + arr);
System.out.println("Flatenned list: " + flatList);
}
}

RELATED TAGS

communitycreator
java

CONTRIBUTOR

Gutha Vamsi Krishna
RELATED COURSES

View all Courses

Keep Exploring

Learn in-demand tech skills in half the time