当前位置: 首页 > 知识库问答 >
问题:

如何在Java8中从流创建二维数组?

宦高岑
2023-03-14

我有一个这样的文本文件:

ids.txt

1000
999
745
123
...

我想读取这个文件并加载到二维数组中。我希望有一个类似于下面的数组:

Object[][] data = new Object[][] { //
     { new Integer(1000) }, //
     { new Integer(999) }, //
     { new Integer(745) }, //
     { new Integer(123) }, //
     ...
};
File idsFile = ... ;
try (Stream<String> idsStream = Files.lines(idsFile.toPath(), StandardCharsets.US_ASCII)) {
    Object[][] ids = idsStream
       .filter(s -> s.trim().length() > 0)
       .toArray(size -> new Object[size][]);

    // Process ids array here...
}
java.lang.ArrayStoreException: null
at java.lang.System.arraycopy(Native Method) ~[na:1.8.0_45]
at java.util.stream.SpinedBuffer.copyInto(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.Nodes$SpinedNodeBuilder.copyInto(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.SpinedBuffer.asArray(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.Nodes$SpinedNodeBuilder.asArray(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.ReferencePipeline.toArray(Unknown Source) ~[na:1.8.0_45]
... 

如何解决此异常?

共有1个答案

越涵衍
2023-03-14

给定,您可以将每个项解析为int并将其包装到对象[]中,使用:

 strings
        .filter(s -> s.trim().length() > 0)
        .map(Integer::parseInt)
        .map(i -> new Object[]{i})

现在,要将该结果转换为对象[][]您只需执行以下操作:

Object[][] result = strings
        .filter(s -> s.trim().length() > 0)
        .map(Integer::parseInt)
        .map(i -> new Object[]{i})
        .toArray(Object[][]::new);

对于输入:

final Stream<String> strings = Stream.of("1000", "999", "745", "123");
[[1000], [999], [745], [123]]
 类似资料:
  • 问题内容: 我有一个像这样的文本文件: ids.txt 我想读取此文件并将其加载到二维数组中。我希望有一个类似于下面的数组: 这是我写的代码: 运行此代码时,将引发异常: 如何解决此异常? 问题答案: 给定,您可以将每个项目解析为,并将其包装为使用: 现在要将结果转换为a,您只需执行以下操作: 对于输入: 输出:

  • 问题内容: 我一直在网上阅读,有些地方说这是不可能的,有些地方说是不可能,然后举一个例子,其他人则反驳该例子,等等。 如何在JavaScript中声明二维数组?(假设有可能) 我将如何访问其成员?(或?) 问题答案:

  • 我是Java8的新手,不能使用流将一个数组映射到另一个二维数组。 和包含键的第二个数组。 0表示:从模式中取0元素 1表示:从模式中取1元素,以此类推 从这两个数组中,我想生成另一个二维数组。在这种情况下,结果如下所示: 请帮忙

  • 是否可以从迭代器创建一个流,其中对象的序列与通过反复调用迭代器的next()方法生成的序列相同?我所考虑的具体情况涉及到Treeset.desceningIterator()返回的迭代器的使用,但是我可以想象在其他情况下,迭代器是可用的,而不是它所引用的集合。 例如,对于,我们可以编写并按照该集合的排序顺序获取该集合中的对象流,但是如果我们希望它们按照不同的顺序,比如通过使用获得的顺序呢?我想象的

  • 问题内容: 我想动态创建一个二维数组。 我知道列数。但是行数正在动态更改。我尝试了数组列表,但它仅将值存储在单个维度中。我能做什么? 问题答案: 由于列的数量是恒定的,你可以有一个的。 由于它以a 为后缀,因此行数可以动态增加和减少。每行都有一个,它是静态的,但是您说列数是固定的,因此这不是问题。

  • 我该如何在Java中使用二维数组来设计这样的东西呢? 除了“name[i][j]=200;”当我把这个放进去的时候,它只印这个,其他什么也不印