0
我有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的選項「轉換爲科特林」
這裏是什麼樣子:
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現在強調這裏的 '添加' 方法:
valuesList.add(value)
它說:
懸而未決參考:添加
我怎樣才能解決這個問題?
UPDATE:
這裏是我的變換函數:
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
}
})
}
對不起,但它仍強調'添加'方法。我正在使用Android Studio 3.0。也許你可以檢查它? – Konrad
請添加您的TransformFunction。它可能被高階函數取代。更新了代碼。現在工作。 –
謝謝,我更新了我的問題。您的解決方案可以運作 – Konrad