fun func2() { var data = mutableListOf<Record>( Record("1", "bob", "java", 3), Record("1", "bob", "python", 4), Record("1", "bob", "c++", 5), Record("2", "jack", "php", 7), Record("2", "jack", "java", 2), ) var personList = mutableListOf<Person>() var persons = data.map { Person(it.id, it.name, null) }.distinct() println(persons) for (person in persons) { val idRecoreds = data.filter { it.id == person.id } // personに紐づくskillを取得 val skills = idRecoreds.map { Skill(person.id, it.skill, it.year) } println(skills) // さらに入れ子 // var skillList = mutableListOf<Skill>() // for (skill in skills) { // // } personList.add(Person(person.id, person.name, skills)) } println(personList) } fun func1() { var data = mutableListOf<Record>( Record("1", "bob", "java", 3), Record("1", "bob", "python", 4), Record("1", "bob", "c++", 5), Record("2", "jack", "php", 7), Record("2", "jack", "java", 2), ) var personList = mutableListOf<Person>() // idのリスト var ids = data.map { it.id }.distinct() println(ids) for (id in ids) { // idが一致するリスト(1つはある) val idRecoreds = data.filter { it.id == id } val idRec = idRecoreds[0] val skills = idRecoreds.map { it.skill }.distinct() println(skills) var skillList = mutableListOf<Skill>() for (skill in skills) { // skillが一致するリスト(1つはある) val skillRecords = idRecoreds.filter { it.skill == skill } for (skillRec in skillRecords) { skillList.add(Skill(id, skillRec.skill, skillRec.year)) } } personList.add(Person(idRec.id, idRec.name, skillList)) } } data class Record ( val id: String, val name: String, val skill: String, val year: Int, ) data class Person ( val id: String, val name: String, val skills: List<Skill>?, ) data class Skill ( val personId: String, val lang: String, val year: Int, )