Java Tutorials for Freshers and Experience developers, Programming interview Questions, Data Structure and Algorithms interview Programs, Kotlin programs, String Programs, Java 8 Stream API, Spring Boot and Troubleshooting common issues.
Friday, November 26, 2021
Java 8 - Convert IntStream to String
Java 8 - Convert IntStream to Array
1. Overview
Wednesday, November 24, 2021
Stream to Array - How To Convert Stream To Array In Java 8?
1. Overview
In this article, we'll explore the different ways to convert Stream to Array in Java 8.
I have shown in the previous article how to convert ArrayList<String> to String[] array in java 8.
Java 8 Stream api provides a method Stream.toArray() method which converts the string to array in a faster way.
Stream.of(String t) method is used to create Stream of Strings as Stream<String>.
We will be showing the conversion on the following in this article
1.1 Using Method Reference
1.2 Lambda Expression
1.3 Custom class stream to custom class array
1.4 On primitive types
But, for all the cases, you must use the Stream.toArray() method.
Stream.toArray() Syntax:
<A> A[] toArray(IntFunction<A[]> generator);
Let us explore each of these topics. In this article, We are going to show examples of how to convert Stream of String into a String array. But, you can convert any Stream of objects into any typed array.
Below all are possible with the toArray() method.
Example 1: Convert Stream<String> to String[] array
Example 2: Convert Stream<Employee> to Employee[] array
Example 3: Convert Stream<CustomClass> to CustomClass[] array
Example 4: Convert Stream<Integer> to Integer[] wrapper Integer array
Example 5: Convert Stream<Integer> to int[] primitive array
2. Using Method Reference
Method Reference is a broad topic. You can go through this article for an advanced level.
Method ref is indicated with "::" double colon operator introduced in java 8 and used to create an instance for a class.
Let us write a simple method with Method reference.
public static String[] convertStreamToArray(Stream<String> stringStream){
String[] strArray = stringStream.toArray(String[]::new);
return strArray;
}
Next, write the code to test this method working fine or not.import java.util.Arrays;
import java.util.stream.Stream;
public class MethodRefStreamToArray {
public static void main(String[] args) {
Stream<String> stringStream = Stream.of("hello", "reader", "welcome", "to", "javaprogramto.com", "blog");
String[] array1 = convertStreamToArray(stringStream);
System.out.println("Array 1 : "+ Arrays.toString(array1));
Stream<String> stringStream2 = Stream.of("seocond", "example", "stream to array");
String[] array2 = convertStreamToArray(stringStream2);
System.out.println("Array 2 : "+ Arrays.toString(array2));
}
public static String[] convertStreamToArray(Stream<String> stringStream) {
String[] strArray = stringStream.toArray(String[]::new);
return strArray;
}
}
Output:Array 1 : [hello, reader, welcome, to, javaprogramto.com, blog] Array 2 : [seocond, example, stream to array]
3. Using Lambda Expression
import java.util.Arrays;
import java.util.stream.Stream;
public class LambdaStreamToArray {
public static void main(String[] args) {
Stream<String> stringStream = Stream.of("hello", "reader", "welcome", "to", "javaprogramto.com", "blog");
String[] array1 = convertStreamToArrayWithLambda(stringStream);
System.out.println("Array 1 : "+ Arrays.toString(array1));
Stream<String> stringStream2 = Stream.of("seocond", "example", "stream to array");
String[] array2 = convertStreamToArrayWithLambda(stringStream2);
System.out.println("Array 2 : "+ Arrays.toString(array2));
}
public static String[] convertStreamToArrayWithLambda(Stream<String> stringStream) {
String[] strArray = stringStream.toArray(size -> {
return new String[size];
});
return strArray;
}
}
This program produces the output as same as the above section.4. Using Custom Generator Class
import java.util.Arrays;
import java.util.function.IntFunction;
import java.util.stream.Stream;
public class CustomIntFunctionStreamToArray {
public static void main(String[] args) {
Stream<String> stringStream = Stream.of("hello", "reader", "welcome", "to", "javaprogramto.com", "blog");
String[] array1 = stringStream.toArray(new CustomIntFunction());
System.out.println("Array 1 : "+ Arrays.toString(array1));
Stream<String> stringStream2 = Stream.of("seocond", "example", "stream to array");
String[] array2 = stringStream2.toArray(new CustomIntFunction());;
System.out.println("Array 2 : "+ Arrays.toString(array2));
}
}
class CustomIntFunction implements IntFunction<String[]>{
@Override
public String[] apply(int size) {
return new String[size];
}
}
Output:Array 1 : [hello, reader, welcome, to, javaprogramto.com, blog]
Array 2 : [seocond, example, stream to array]
5. Stream to Primitive Or Wrapper Array conversion
Wrapper Stream to Wrapper[] Array Example
import java.util.Arrays; import java.util.stream.Stream; public class WrapperStreamToArray { public static void main(String[] args) { Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6, 7); Integer[] array1 = integerStream.toArray(Integer[]::new); System.out.println("Integer Array 1 : " + Arrays.toString(array1)); Stream<Integer> integerStream2 = Stream.of(11, 22, 33, 44, 55); Integer[] array2 = integerStream2.toArray(size -> new Integer[size]); System.out.println("Integer Array 2 : " + Arrays.toString(array2)); } }Output:
Integer Array 1 : [1, 2, 3, 4, 5, 6, 7] Integer Array 2 : [11, 22, 33, 44, 55]
Integer[] array2 = integerStream2.toArray(size -> new Integer[0]);
Exception:Exception in thread "main" java.lang.IllegalStateException: Begin size 5 is not equal to fixed size 0 at java.base/java.util.stream.Nodes$FixedNodeBuilder.begin(Nodes.java:1222) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:550) at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:517) at com.javaprogramto.java8.streams.toarray.WrapperStreamToArray.main(WrapperStreamToArray.java:18)
Wrapper Stream to int[] primitive Array Example
import java.util.Arrays; import java.util.stream.Stream; public class PrimitiveStreamToArray { public static void main(String[] args) { Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6, 7); int[] array1 = integerStream.mapToInt(primitiveVlaue -> primitiveVlaue).toArray(); System.out.println("int[] Array 1 : " + Arrays.toString(array1)); Stream<Integer> integerStream2 = Stream.of(11, 22, 33, 44, 55); int[] array2 = integerStream2.mapToInt( i -> i).toArray(); System.out.println("int[] Array 2 : " + Arrays.toString(array2)); } }
7. Exception
Array 1 : [hello, reader, welcome, to, javaprogramto.com, blog]Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:246) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:517) at com.javaprogramto.java8.streams.toarray.CustomIntFunctionStreamToArray.main(CustomIntFunctionStreamToArray.java:19)
8. Conclusion
Sunday, August 16, 2020
Java 8 – Convert Map to List (HashMap to ArrayList)
1.Overview
Popular Posts
- Adding/Writing Comments in Java, Comment types with Examples
- 3 Ways to Fix Git Clone "Filename too long" Error in Windows [Fixed]
- Java Program To Reverse A String Without Using String Inbuilt Function reverse()
- Java IS-A and HAS-A Relationship With Examples
- Java Thread.join() Examples to Wait for Another Thread