gpt4 book ai didi

java - 如何将此排序映射方法从 java 转换为 Kotlin

转载 作者:行者123 更新时间:2023-12-01 17:50:16 25 4
gpt4 key购买 nike

如何将以下 Java 转换为 Kotlin?

private Map<String, Map<String, String>> example(List<Dto> dtos) {

if (dtos.isEmpty()) {
return ImmutableMap.of();
}

final Map<String, Map<String, String>> outerMapByField1 = new TreeMap<>();

dtos.forEach(dto -> {

final String field1 = dto.getField1();

final Map<String, String> innerMapByField2 = outerMapByField1.computeIfAbsent(field1, (key) -> new TreeMap<>());
innerMapByField2.put(dto.getField2(), dto.getField3());

});

return outerMapByField1;

}

IntelliJ 转换为我提供了一些可以使用的东西,我尝试重构它,最终得到以下结果,但无法编译。

private fun example(dtos: List<Dto>): Map<String, Map<String, String>> {

if (dtos.isEmpty()) {
return ImmutableMap.of()
}

val outerMapByField1 = sortedMapOf<String, Map<String, String>>()

dtos.forEach { dto ->

val field1 = dto.field1

val innerMapByField2 = outerMapByField1.getOrPut(field1) { key -> TreeMap() }
innerMapByField2.put(dto.field2, dto.field3)

}

return outerMapByField1

}

最佳答案

  • 首先,outerMapByField1 中的值为 Map实例,这是一个只读接口(interface)。要修改这些 map ,您需要将它们存储为 MutableMap s(根据@Heinrisch的回答)。
  • Kotlin 提供 emptyMap()您可能会考虑使用该函数来代替 ImmutableMap.of()
  • lamda 传递至 getOrPut不接受参数,因此您必须删除 key ->

以下是所有应用的内容:

private fun example(dtos: List<Dto>): Map<String, Map<String, String>> {

if (dtos.isEmpty()) {
return emptyMap()
}

val outerMapByField1 = sortedMapOf<String, MutableMap<String, String>>()

dtos.forEach { dto ->

val field1 = dto.field1

val innerMapByField2 = outerMapByField1.getOrPut(field1) { TreeMap() }
innerMapByField2.put(dto.field2, dto.field3)

}

return outerMapByField1

}

关于java - 如何将此排序映射方法从 java 转换为 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50964783/

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