gpt4 book ai didi

kotlin - 如果在并行流上运行,collect是否返回列表快照?

转载 作者:行者123 更新时间:2023-12-02 12:42:35 24 4
gpt4 key购买 nike

我有一个单元测试,在Circle CI上仅上开始失败。在此示例(Kotlin)的最后一行失败:

generator.generateNames(50) // returns List<String>
.parallelStream()
.map { name ->
val playerId = "${name.firstName.toLowerCase()}"
Player(playerId = playerId)
}.collect(Collectors.toList()).last()

抛出: Caused by: java.util.NoSuchElementException

如果我不使用并行流,它将始终在我的本地计算机或Circle CI上运行。我的理论是 collect调用返回一个List快照(实际上直到列表完全填满它才阻塞),并且CI没有足够的CPU来收集其他线程中的单个元素吗?

但是,我的视频流是有序的,因此收集器对吗?这甚至是并行收集吗?

最佳答案

您正在获取的异常中可能包含一条消息,而不仅仅是异常的名称。该消息可能告诉您错误。例如,代码的最后一部分调用Kotlin扩展函数last(),该函数在实现中:

public fun <T> List<T>.last(): T {
if (isEmpty())
throw NoSuchElementException("List is empty.")
return this[lastIndex]
}

因此,如果您在 java.util.NoSuchElementException的堆栈跟踪中看到“列表为空”消息,那就是原因。

另外,如果您共享堆栈跟踪,则可以实际看到引发异常的原因。但是查看您的代码,这是唯一可能的选择。

然后的问题是,“为什么最终列表为空?!” ... generateNames(50)在这种环境下工作方式有所不同吗?问题不在于提供同步结果的 collect(Collectors.toList())

关于kotlin - 如果在并行流上运行,collect是否返回列表快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53373038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com