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) }