PUROGU LADESU

ポエムがメインのブログです。

【kotlin】レコードを分解する

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,
)