given List<Integer> count
, I want to produce String[] countStr
using java 8.
example:
input
List<Integer> count = [1,2,3,4];
output
String[] countStr = ["1","2","3","4"]
I am familar with how to do this using for-each
in java 7. I am wondering if I can get a concise way of doing this using java 8.
This is what I tried.
String[] countStr = count.stream().map(String::valueOf).toArray();
But I get compile error, that the above toArray()
method returns Object[]
.
Based on the comments, I tried the following:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Stream<Integer> streamString = list.stream();
String[] stringArray = streamString.toArray(size -> new String[size]);
System.out.println(Arrays.toString(stringArray));
I get
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
at java.util.stream.Nodes$FixedNodeBuilder.accept(Nodes.java:1222)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:576)
at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:255)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
at TestDateParser.JavaApi(TestDateParser.java:40)
at TestDateParser.main(TestDateParser.java:12)
Update: This worked.
count.stream().map(String::valueOf).toArray(size -> new String[size]);