代码之家  ›  专栏  ›  技术社区  ›  findusl

Kotlin flatMapTo不编译

  •  0
  • findusl  · 技术社区  · 4 年前

    我想把一个集合平面映射到一个集合。我有下面的代码不是用IntelliJ IDEA编译的。我不知道为什么:

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

    最后在lambda上有一个非常令人困惑的错误消息,它说:

    类型不匹配。必需:(kotlin.collections.HashSet<String>/*= java.util.HashSet<字符串> /)找到–Iterable<String> (kotlin.collections.HashSet<字符串>/ =java.util.HashSet<字符串>*/) –迭代器<字符串>

    但它们完全一样?我不明白为什么那不起作用。

    还有一条错误消息显示在 flatMapTo 函数并说:

    类型推断失败:

    内联fun<T,R,C:MutableCollection<in R>Iterable<T>.flatMapTo( 目的地:C,转换:(T)Iterable<R>):C不能应用 到

    接收者:List<kotlin.collections.HashSet<String>/*= java.util.HashSet<字符串>&ast;/>参数:( kotlin.collections.HashSet<String>/*=java.util.HashSet<String>&ast;/, (kotlin.collections.HashSet<String>/*=java.util.HashSet<String>&ast;/) 迭代器<字符串>)

    *希望我没有忘记引号里的特殊字符。必须用html实体替换<和一些**

    1 回复  |  直到 4 年前
        1
  •  0
  •   JB Nizet    4 年前

    你的lambda返回一个 Iterator<String> . 它应该会返回一个 Iterable<String> . 一个 Set<String> 已经是 Iterable<字符串> .

    你只需要

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