Yimin
Yimin

Reputation: 365

Converting int[][] to boolean[][]: java.lang.ArrayStoreException

layout is int[][]

boolean[][] booleanTileMap = Arrays
      .stream(layout)
      .map((row) -> 
        Arrays
          .stream(row)
          .mapToObj((value) -> value != 0)
          .toArray()
      )
      .toArray(boolean[][]::new);

Full Error:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayStoreException: [Ljava.lang.Object;
        at java.base/java.util.stream.Nodes$FixedNodeBuilder.accept(Nodes.java:1222)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
        at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
        at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)

What did I do wrong? IDE didn't highlight any errors or warnings.

Upvotes: 0

Views: 233

Answers (1)

Yimin
Yimin

Reputation: 365

It worked after changing from boolean to Boolean, and the first toArray() to toArray(Boolean[]::new)

Boolean[][] booleanTileMap = Arrays
      .stream(layout)
      .map((row) -> 
        Arrays
          .stream(row)
          .mapToObj((value) -> value != 0)
          .toArray(Boolean[]::new) // This was just .toArary() before
      )
      .toArray(Boolean[][]::new);

Upvotes: 2

Related Questions