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 «конвертировать в 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) 

В нем говорится:

неразрешенная ссылка: 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 <> своим значениямList, он не знает 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) }