首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大尺寸ParallelStream toArray Java8

大尺寸ParallelStream toArray Java8
EN

Stack Overflow用户
提问于 2018-04-10 17:46:55
回答 2查看 527关注 0票数 3

我正在尝试从并行流创建一个大小更大的数组。

代码语言:javascript
复制
myList.parallelStream().map((listElm) -> {
            return someObjectMorpher(listElm);}).toArray(size -> new SomeObject[size+4]);
  1. 是否保证数组的最后4个元素始终为空?这意味着toArray总是在数组的第一个索引处填充。
  2. 是否有可能让toArray填充已经创建的数组? SomeObjet [] arr =新SomeObjectmyList.size() + 4;arr =新SomeObject(x);myList.parallelStream() .map(ListElm) -> {.map(ListElm );}).toArray(**//使用arr** );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-10 18:05:42

是否保证数组的最后4个元素始终为空?

从本质上说不是。数组的最后四个元素将保留它们以前的值。如果值恰好是null,那么它们将保持为null。例如:

代码语言:javascript
复制
Integer[] array = Stream.of(7, 8).parallel().toArray(i -> new Integer[] {1, 2, 3, 4, 5, 6});

System.out.println(Arrays.toString(array));

输出:

代码语言:javascript
复制
[7, 8, 3, 4, 5, 6]

是否有可能让toArray填充已经创建的数组?

是的,见上文,以及另一个例子:

代码语言:javascript
复制
Integer[] array = new Integer[] {1, 2, 3, 4, 5, 6};

Integer[] newArray = Stream.of(7, 8).parallel().toArray(i -> array);

System.out.println(Arrays.toString(newArray));

输出:

代码语言:javascript
复制
[7, 8, 3, 4, 5, 6]

备注:如果数组的长度与流的大小不同,尝试使用顺序流进行此操作将引发IllegalStateException

票数 3
EN

Stack Overflow用户

发布于 2018-04-10 18:19:02

更新似乎基于以下问题:Why can I collect a parallel stream to an arbitrarily large array but not a sequential stream?

代码语言:javascript
复制
toArray(size -> new Integer[size + 4])

正在违反发电机https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#toArray-java.util.function.IntFunction-的合同

生成器--一个函数,它产生一个新的数组,该数组具有所需的类型和给定的长度。

因此,即使下面的断言通过了,下面的代码也不应该使用

原始响应

是否保证数组的最后4个元素始终为空?这意味着toArray总是在数组的第一个索引处填充。

如果提供生成器函数来分配所需大小的新数组,则此操作确实有效。

代码语言:javascript
复制
    Integer[] result = Arrays.asList(3,4,5).parallelStream().map(i -> i + 1).toArray(size -> new Integer[size + 4]);
    assert(result.length == 7);
    assert(result[3] == null);
    assert(result[4] == null);
    assert(result[5] == null);
    assert(result[6] == null);

所有这些断言都过去了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49760006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档