[英]Kotlin: How to map a field from list to a new list and group it
我有两个清单
list1 = [ { city: 'Los Angeles', population: '4 million ' } ... ]
list2 = [ { nameOfCity: 'New York', language: 'English' }, {nameOfCity: 'Berlin', language: 'German' ]
现在我需要创建一个新列表并按城市名称过滤这两个列表,然后按相同的语言对其进行分组
newClass(val nameOfCities: List<String>, language: String)
所以我需要检查 list2 的城市名称是否在列表 2 中(list2.filter { it.nameOfCity.= list1.city } 并将所有名称存储在按语言分组的 nameOfCities 列表中
所以最终结果应该是这样的:
[
{ nameOfCities: [New York, Chicago]
language: Engilsh
},
{ nameOfCities: [Berlin]
language: German
}
]
因此,我得到了 list1 中不存在并按相同语言分组的所有城市的新列表。
这是我得到的最接近的:
for (item in list1) {
reducedList = (list2.filter { it.nameOfCity != item.city }.map { newClass(it.nameOfCity, it.language) })
.toList().groupBy { it.language }
}
但是格式是这样的:
'english': [
{ nameOfCity: 'Los Angeles', language: 'English' },
{ nameOfCity: 'New York', language: 'English' },
],
'german': [ { nameOfCity: 'Berlin ', language: 'German' } ]
我不确定我是否理解您的意思,但我会尽力帮助您:
我假设您有 3 个类,如下所示:
class newClass(val nameOfCities: List<String>, val language: String)
class ListElement1(val city: String, val population: String)
class ListElement2(val nameOfCity: String, val language: String)
和 2 个列表:
val list1 = listOf(ListElement1("Los Angeles", "4 million"))
val list2 = listOf(ListElement2("New York", "English"), ListElement2("Berlin", "German"))
过滤 list2 以便将 list1 和 map 中的所有城市全部删除到 newClass 列表中:
var reducedList: List<NewClass> = listOf()
list1.forEach{ listElement1 ->
= list2.filter { listElement1.city != it.nameOfCity }
.groupBy { it.language }.map { newClass(it.value.map { it.nameOfCity }, it.key) }
}
结果(json):
[
{
language = "English",
nameOfCities= [
"New York"
]
},
{
language = "German",
nameOfCities= [
"Berlin"
]
}
]
结果(类):
[
newClass(nameOfCities=[New York], language=English),
newClass(nameOfCities=[Berlin], language=German)
]
也许这个会有所帮助:
list2.filter { list2Element -> !list1.any { it.city == list2Element.nameOfCity} }
.groupBy({it.language}, {it.nameOfCity}).map { newClass(it.value, it.key) }
您可以简单地使用.any() 而不是迭代和过滤
我不知道我是否正确理解了您的问题,如果不是,我很抱歉我还是新手。 我可能会在 List 接口中使用 .contains() 方法(无论您使用的 List 是否有效,ArrayList、LinkedList 和 Vector 我很确定它们都有该方法,因为它们实现了 List 接口)。 所以我会 go 通过使用 for each 的列表之一并使用 .contains() 方法。 我希望这有助于我知道这不是最好的答案。 抱歉,如果这不是您正在寻找的答案,祝您有愉快的一天。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.