Pages

Thursday, December 10, 2020

Java 8 - How To Convert Any Stream to List in Java? toList()?

1. Overview

In this tutorial, We'll learn how to convert any type of Stream to List in java 8

Use Collectors.toList() method to convert the lambda Stream Collect to List or ArrayList. When you call toList() method, it creates an ArrayList object and returns to the caller.

But, if you want to get the List as LinkedList then need to use Collectors.toCollection() method.

Let us see the example programs using these two methods for better understanding.

Java 8 - How To Convert Stream to List in Java? Collectors.toList()


2. Java 8 - Convert Stream to List


Below example program to convert a stream to list using Collectors.toList() method with the help of collect() method.

package com.javaprogramto.java8.collectors.streamtolist;

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

/**
 * Example Stream to List
 * 
 * @author javaprogramto.com
 *
 */
public class StreamToListExample {

	public static void main(String[] args) {
		// creating an list
		List<String> names = Arrays.asList("Nick", "Boran", "Tison", "Sunshine");

		// converting list to stream
		Stream<String> stream = names.stream();

		// finally collecting the stream values into a list with any filtering the
		// objects.
		List<String> finalList = stream.collect(Collectors.toList());

		// printing
		System.out.println("List values : " + finalList);
	}
}

Output:

List values : [Nick, Boran, Tison, Sunshine]

3. Java 8 - Numbers Stream to List With filter() - Stream.of()


In this approach, first we will create the Stream of integers as Stream<Integer> using Stream.of() method and pass the numbers to of() method. We can pass any number of int values comma separated to this method. Because this method takes the input var-args.

package com.javaprogramto.java8.collectors.streamtolist;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Example on numbers Stream to List
 * 
 * @author javaprogramto.com
 *
 */
public class NumbersStreamToListExample {

	public static void main(String[] args) {

		// Creating a stream using of() method.
		Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);

		// Filtering the stream values to get only even numbers and next collect into ArrayList.
		List<Integer> finalList = stream.filter(e -> e % 2 == 0).collect(Collectors.toList());

		// printing
		System.out.println("Final ArrayList values : " + finalList);
	}
}

Output:
Final ArrayList values : [2, 4]

In the above program, after adding the first 5 integers to stream and adding filter() to get only the even numbers. Finally, Invoked the collect(Collectors.toList()) method which returns ArrayList instance default and stored the values into the List<Integer> variable.

4. Java 8 Stream to List as LinkedList


In the above sections, we've used Collectors.toList() method to get ArrayList object from stream values. But, if we want to get it as LinkedList then use another Collectors method toCollection() method which takes the LinkedList object as LinkedList::new.

LinkedList::new will create a new LinkedList object using Method Reference concept.

package com.javaprogramto.java8.collectors.streamtolist;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Example Stream to LinkedList
 * 
 * @author javaprogramto.com
 *
 */
public class StreamToLinkedListExample {

	public static void main(String[] args) {
		// creating an list
		List<String> values = Arrays.asList("1", "2", "3", "4", "5");

		// converting list to stream
		Stream<String> stream = values.stream();

		// Collecting the stream values into a LinkedList using stream collectors.
		LinkedList<String> linkedList = stream.collect(Collectors.toCollection(LinkedList::new));

		// printing
		System.out.println("LinkedList values : " + linkedList);
	}
}

Output:
LinkedList values : [1, 2, 3, 4, 5]

5. Java 8 - Convert Infinite Stream to List


Java 8 api allows to create infinite streams of number using IntStream.iterate() method.

Let us now convert Infinite stream into List with limiting the number values from unlimited stream using limit() method.

Look at the below example.

limit(): taking first 10 values from infinite stream
boxed(): convert primitive to Wrapper integer object.
toList(): collecting stream values into List.

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * Example on Infinite Stream to List
 * 
 * @author javaprogramto.com
 *
 */
public class StreamToListExample {

	public static void main(String[] args) {

		// Creating the infinite even numbers stream using iterate() starts from value
		// 10.
		IntStream infiniteStream = IntStream.iterate(10, i -> i + 2);

		// limit() + boxed() + toList() example
		List<Integer> finalList = infiniteStream.limit(10).boxed().collect(Collectors.toList());

		// printing
		System.out.println("List values : " + finalList);
	}
}

Output:
List values : [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

6. Conclusion


In this article, we've seen how to convert stream to list in java 8. Use Collectors.toList() to get the output in ArrayList object and Collectors.toCollection() method to get the output for other collections as LinkedList.



No comments:

Post a Comment

Please do not add any spam links in the comments section.