How to print an Array in Java
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.
PrintArray1.java
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
Terminal
[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.
PrintArray2.java
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
Terminal
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.
PrintArray3.java
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
Terminal
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.
pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
PrintUtils.java
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();
}
}
}
PrintArray4.java
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
Terminal
[ "Java", "Node", "Python", "Ruby" ]
[ 1, 3, 5, 7, 9 ]
[ [ "mkyong1", "mkyong2" ], [ "mkyong3", "mkyong4" ] ]
[ [ 1, 3, 5, 7, 9 ], [ 2, 4, 6, 8, 10 ] ]
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
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