Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin:如何将字段从列表映射到新列表并将其分组_Java_Spring_List_Kotlin - Fatal编程技术网

Java Kotlin:如何将字段从列表映射到新列表并将其分组

Java Kotlin:如何将字段从列表映射到新列表并将其分组,java,spring,list,kotlin,Java,Spring,List,Kotlin,我有两张单子 list1 = [ { city: 'Los Angeles', population: '4 million ' } ... ] list2 = [ { nameOfCity: 'New York', language: 'English' }, {nameOfCity: 'Berlin', language: 'German' ] 现在,我需要创建一个新列表,并按城市名称筛选这两个列表,然后按相同的语言对其进行分组 newClass(val nameOfCities: Lis

我有两张单子

list1 = [ { city: 'Los Angeles', population: '4 million ' } ... ]
list2 = [ { nameOfCity: 'New York', language: 'English' }, {nameOfCity: 'Berlin', language: 'German' ]
现在,我需要创建一个新列表,并按城市名称筛选这两个列表,然后按相同的语言对其进行分组

newClass(val nameOfCities: List<String>, language: String)
因此,我得到了一个新的列表,列出了列表1中不存在的所有城市,并用相同的语言进行了分组

这是我得到的最接近的结果:

    for (item in list1) {
            reducedList = (list2.filter { it.nameOfCity != item.city }.map { newClass(it.nameOfCity, it.language) })
                .toList().groupBy { it.language }
        }
但格式如下:

[
{ nameOfCities: [New York, Chicago]
  language: Engilsh
},
{ nameOfCities: [Berlin]
  language: German
 }
]
'english': [
    { nameOfCity: 'Los Angeles', language: 'English' },
    { nameOfCity: 'New York', language: 'English' },
],
'german': [ { nameOfCity: 'Berlin ', language: 'German' } ]

我不知道我是否理解了你的问题,如果没有,我很抱歉,我还是个新手。我可能会在列表接口中使用.contains()方法(无论您使用的是works、ArrayList、LinkedList和Vector,我很确定它们都有该方法,因为它们实现了列表接口)。因此,我将使用for each遍历其中一个列表,并使用.contains()方法。我希望这有帮助,我知道这不是最好的答案。抱歉,如果这不是您想要的答案,祝您今天愉快。

我不确定我是否理解您的意思,但我会尽力帮助您:

我假设您有3个类,如下所示:

class新类(val城市名称:列表,val语言:字符串)
类ListElement1(val city:String,val population:String)
类ListElement2(val名称城市:String,val语言:String)
和2个列表:

val list1=listOf(listlement1(“洛杉矶”,“400万”))
val list2=listOf(listelment2(“纽约”、“英语”)、listelment2(“柏林”、“德语”))
筛选列表2以删除列表1中的所有城市,并将所有城市映射到newClass列表:

var reducedList:List=listOf()
list1.forEach{listlement1->
=list2.filter{listlement1.city!=it.nameOfCity}
.groupBy{it.language}.map{newClass(it.value.map{it.nameOfCity},it.key)}
}
结果(json):

[
{
language=“English”,
城市名称=[
“纽约”
]
},
{
语言=“德语”,
城市名称=[
“柏林”
]
}
]
成绩(班级):

[
newClass(城市名称=[纽约],语言=英语),
新类别(城市名称=[柏林],语言=德语)
]

也许这本书会很有帮助:

        list2.filter { list2Element -> !list1.any { it.city == list2Element.nameOfCity} }
        .groupBy({it.language}, {it.nameOfCity}).map { newClass(it.value, it.key) }

不用迭代和过滤,只需使用.any()

即可,谢谢!我丢失了地图中的附加地图。