Kotlin未解决的参考:从Java代码转换后添加
我有这样的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将其转换为“convert to 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)
它说:
未解决的参考:添加
我该如何解决这个问题?
更新:
这是我的转换功能:
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 <>到你的valuesList它不知道add()。
将其更改为
fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, ArrayList<VALUE>> { var valuesList: ArrayList<VALUE>? = tmpMap[key]
更好地使用Kotlins MutableList ,它目前与Javas 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) }