gpt4 book ai didi

使用 Stream 的 Kotlin 智能 Actor

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

我有接口(interface)A和类(class)B: A

val a: Stream<A>

val b: Stream<B> = a.filter { it is B }
.map { it as B }

有没有办法使用 Kotlin 智能 Actor 来写这个?

最佳答案

Is there a way to write this using Kotlin smart casts?



不,这在基本静态分析中是不可能的,因为没有指示 a ,过滤后只包含 B s,因为它仍然是 Stream<A> ,所以你必须自己检查。 Kotlin 的智能转换仅适用于变量的值,而不适用于类型参数。

AFAIK 在 Java 或 Kotlin 库中没有任何可以执行此操作的 Stream s,但你可以 convert the stream to a Sequence 并使用 filterIsInstance :
a.asSequence().filterIsInstance<B>().asStream()

当然,您也可以使用扩展方法直接在流上实现此功能:
inline fun <reified B> Stream<*>.filterIsInstance() = a.filter { it is B }.map { it as B }

...

val a: Stream<A>
val b: Stream<B> = a.filterIsInstance<B>()

只是评论:你需要使用 Stream年代?我会考虑使用 Kotlin 的 Sequence s 从头开始​​。

关于使用 Stream 的 Kotlin 智能 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48788777/

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