【问题标题】:Kotlin flatMapTo does not compileKotlin flatMapTo 无法编译
【发布时间】:2020-04-18 16:15:01
【问题描述】:

我想将集合的集合平面映射到单个集合。我有以下代码无法在 IntelliJ IDEA 中编译。我不知道为什么:

listOf(HashSet<String>()).flatMapTo(HashSet<String>()) { it.iterator() as Iterator<String> }

最后在 lambda 上有一条非常令人困惑的错误消息:

类型不匹配。必需:(kotlin.collections.HashSet /* = java.util.HashSet/) → Iterable 发现: (kotlin.collections.HashSet / = java.util.HashSet */) → 迭代器

但它们完全一样吗?我很困惑为什么这不起作用。

flatMapTo 函数上还显示一条错误消息,并说:

类型推断失败:

inline fun > Iterable.flatMapTo ( 目的地:C,变换:(T)→Iterable):C不能应用 到

接收者:列表 /* = java.util.HashSet &ast;/> 参数:( kotlin.collections.HashSet /* = java.util.HashSet &ast;/, (kotlin.collections.HashSet /* = java.util.HashSet &ast;/) → 迭代器 )

*希望我没有忘记引号中的任何特殊字符。必须用 html 实体替换

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    您的 lambda 返回一个 Iterator&lt;String&gt;。它应该返回一个Iterable&lt;String&gt;Set&lt;String&gt; 已经是 Iterable&lt;String&gt;

    你只需要

    listOf(HashSet<String>()).flatMapTo(HashSet()) { it }
    

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2020-07-13
      • 2018-01-27
      • 2022-08-22
      • 2022-08-22
      相关资源
      最近更新 更多