gpt4 book ai didi

java - Kotlin 未解析的引用 :add after converting from Java code

转载 作者:行者123 更新时间:2023-12-01 19:32:59 24 4
gpt4 key购买 nike

我的java代码如下所示:

    public static <KEY, VALUE> Map<KEY, List<VALUE>> createMultimap(@NonNull Collection<VALUE> values, @NonNull TransformFunction<VALUE, KEY> transformFunction) {
Map<KEY, List<VALUE>> tmpMap = new HashMap<>();
for (VALUE value : values) {
if (value != null) {
KEY key = transformFunction.transform(value);
List<VALUE> valuesList = tmpMap.get(key);
if (valuesList == null) {
valuesList = new ArrayList<>();
tmpMap.put(key, valuesList);
}
valuesList.add(value);
}
}
return Collections.unmodifiableMap(tmpMap);
}

我使用 Android Studio 选项“转换为 Kotlin”对其进行了转换

这是这样的:

    fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, List<VALUE>> {
val tmpMap = HashMap<KEY, List<VALUE>>()
for (value in values) {
if (value != null) {
val key = transformFunction.transform(value)
var valuesList: List<VALUE>? = tmpMap[key]
if (valuesList == null) {
valuesList = ArrayList()
tmpMap.put(key, valuesList)
}
valuesList.add(value)

}
}
return Collections.unmodifiableMap(tmpMap)
}

IDE 现在在此处强调了“add”方法:

valuesList.add(value)

它说:

unresolved reference :add

我该如何解决这个问题?

更新:

这是我的转换函数:

    interface TransformFunction<VALUE, RESULT> {
fun transform(value: VALUE?): RESULT
}

使用示例:

    private fun getRSSIMultimap(rssiEvents: Collection<LocationRSSIEvent>): Map<NexoIdentifier, List<LocationRSSIEvent>> {
return CollectionsUtils.createMultimap(rssiEvents, object : CollectionsUtils.TransformFunction<LocationRSSIEvent, NexoIdentifier> {
override fun transform(locationRSSIEvent: LocationRSSIEvent): NexoIdentifier {
return locationRSSIEvent.nexoIdentifier
}
})
}

最佳答案

由于您将 List<> 分配给 valueList,因此它不知道 add()。

更改为

 fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, ArrayList<VALUE>> {
var valuesList: ArrayList<VALUE>? = tmpMap[key]

更好地使用 Kotlins MutableList目前与 Java ArrayList 相同,但在以后的版本中可能会更改为原生方法。

 fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, MutableList<VALUE>> {
val tmpMap = HashMap<KEY, MutableList<VALUE>>()
for (value in values) {
if (value != null) {
val key = transformFunction.transform(value)
var valuesList: MutableList<VALUE>? = tmpMap[key]
if (valuesList == null) {
valuesList = mutableListOf()
tmpMap.put(key, valuesList)
}
valuesList.add(value)

}
}
return Collections.unmodifiableMap(tmpMap)
}

关于java - Kotlin 未解析的引用 :add after converting from Java code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850554/

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