In this article, we will show you a few ways to print a Java Array.
Table of contents.
- 1. JDK 1.5 Arrays.toString
- 2. Java 8 Stream APIs
- 3. Java 8 Stream APIs – Collectors.joining
- 4. Jackson APIs
- 5. References
1. JDK 1.5 Arrays.toString
We can use Arrays.toString to print a simple array and Arrays.deepToString for 2d or nested arrays.
package com.mkyong;
import java.util.Arrays;
public class PrintArray1 {
public static void main(String[] args) {
// string array
String[] strArray = new String[]{"Java", "Node", "Python", "Ruby"};
System.out.println(Arrays.toString(strArray));
// Output : [Java, Node, Python, Ruby]
// int Array
int[] intArray = {1, 3, 5, 7, 9};
System.out.println(Arrays.toString(intArray));
// Output : [1, 3, 5, 7, 9]
// 2d array, need Arrays.deepToString
String[][] strArrayDeep = new String[][]{{"mkyong1", "mkyong2"}, {"mkyong3", "mkyong4"}};
System.out.println(Arrays.toString(strArrayDeep));
// Output : [[Ljava.lang.String;@23fc625e, [Ljava.lang.String;@3f99bd52]
System.out.println(Arrays.deepToString(strArrayDeep));
// Output : [[mkyong1, mkyong2], [mkyong3, mkyong4]
int[][] intArrayDeep = new int[][]{{1, 3, 5, 7, 9}, {2, 4, 6, 8, 10}};
System.out.println(Arrays.toString(intArrayDeep));
// Output : [[I@3a71f4dd, [I@7adf9f5f]
System.out.println(Arrays.deepToString(intArrayDeep));
// Output : [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
}
}
Output
[Java, Node, Python, Ruby]
[1, 3, 5, 7, 9]
[[Ljava.lang.String;@41629346, [Ljava.lang.String;@404b9385]
[[mkyong1, mkyong2], [mkyong3, mkyong4]]
[[I@682a0b20, [I@3d075dc0]
[[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
2. Java 8 Stream APIs
In Java 8, we can use Stream APIs to convert a simple array into a stream and print it out one by one; for 2d or nested array, we need to use flatMap.
package com.mkyong;
import java.util.Arrays;
public class PrintArray2 {
public static void main(String[] args) {
// simple array
String[] strArray = new String[]{"Java", "Node", "Python", "Ruby"};
Arrays.stream(strArray).forEach(System.out::println);
int[] intArray = {1, 3, 5, 7, 9};
Arrays.stream(intArray).forEach(System.out::println);
//2d array
String[][] strArrayDeep = new String[][]{{"mkyong1", "mkyong2"}, {"mkyong3", "mkyong4"}};
Arrays.stream(strArrayDeep).flatMap(Arrays::stream).forEach(System.out::println);
int[][] intArrayDeep = new int[][]{{1, 3, 5, 7, 9}, {2, 4, 6, 8, 10}};
Arrays.stream(intArrayDeep).flatMapToInt(Arrays::stream).forEach(System.out::println);
// lambda
// Arrays.stream(intArrayDeep).flatMapToInt(x -> Arrays.stream(x)).forEach(System.out::println);
}
}
Output
Java
Node
Python
Ruby
1
3
5
7
9
mkyong1
mkyong2
mkyong3
mkyong4
1
3
5
7
9
2
4
6
8
10
3. Java 8 Stream APIs – Collectors.joining
The below example uses the Collectors.joining to join arrays into a string and print it out.
package com.mkyong;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class PrintArray3 {
public static void main(String[] args) {
// simple array
String[] strArray = new String[]{"Java", "Node", "Python", "Ruby"};
String strArrayCollect = Arrays.stream(strArray).collect(Collectors.joining(", "));
System.out.println(strArrayCollect);
// alternative
System.out.println(String.join(", ", strArray));
int[] intArray = {1, 3, 5, 7, 9};
String intArrayCollect = Arrays.stream(intArray)
.mapToObj(Integer::toString)
.collect(Collectors.joining(", "));
System.out.println(intArrayCollect);
//2d array
String[][] strArrayDeep = new String[][]{{"mkyong1", "mkyong2"}, {"mkyong3", "mkyong4"}};
String strArrayDeepCollect = Arrays.stream(strArrayDeep)
.flatMap(Arrays::stream)
.collect(Collectors.joining(", "));
System.out.println(strArrayDeepCollect);
int[][] intArrayDeep = new int[][]{{1, 3, 5, 7, 9}, {2, 4, 6, 8, 10}};
String intArrayDeepCollect = Arrays.stream(intArrayDeep).flatMapToInt(Arrays::stream)
.mapToObj(Integer::toString)
.collect(Collectors.joining(", "));
System.out.println(intArrayDeepCollect);
}
}
Output
Java, Node, Python, Ruby
Java, Node, Python, Ruby
1, 3, 5, 7, 9
mkyong1, mkyong2, mkyong3, mkyong4
1, 3, 5, 7, 9, 2, 4, 6, 8, 10
4. Jackson APIs
We can use the Jackson API ObjectMapper to print anything.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
package com.mkyong;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class PrintUtils {
private static final ObjectMapper om = new ObjectMapper();
public static void print(Object object) {
String result;
try {
result = om.writerWithDefaultPrettyPrinter().writeValueAsString(object);
System.out.println(result);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
package com.mkyong;
public class PrintArray4 {
public static void main(String[] args) {
// simple array
String[] strArray = new String[]{"Java", "Node", "Python", "Ruby"};
PrintUtils.print(strArray);
int[] intArray = {1, 3, 5, 7, 9};
PrintUtils.print(intArray);
//2d array or nested array
String[][] strArrayDeep = new String[][]{{"mkyong1", "mkyong2"}, {"mkyong3", "mkyong4"}};
PrintUtils.print(strArrayDeep);
int[][] intArrayDeep = new int[][]{{1, 3, 5, 7, 9}, {2, 4, 6, 8, 10}};
PrintUtils.print(intArrayDeep);
}
}
Output
[ "Java", "Node", "Python", "Ruby" ]
[ 1, 3, 5, 7, 9 ]
[ [ "mkyong1", "mkyong2" ], [ "mkyong3", "mkyong4" ] ]
[ [ 1, 3, 5, 7, 9 ], [ 2, 4, 6, 8, 10 ] ]
Wont print one by one element and it prints object value only. So you sample output is wrong.
Arrays.stream(arrayInt).forEach(System.out::println);
Thanks Mkyong for sharing the detail. its quite useful
it can also be described here how to print an Integer[] array
public static void printArray(Object[] R){
System.out.println(Arrays.deepToString(R).replaceAll(“],”, “],” + System.getProperty(“line.separator”)));
}
this article is very helpful for everyone who want to print an array.
thank you for this nice post