代码之家  ›  专栏  ›  技术社区  ›  martinseal1987

Kotlin单分配过滤器和映射

  •  -1
  • martinseal1987  · 技术社区  · 4 年前

    我想把它变成一个单一的赋值属性

    val movesWithMetaDataList: MutableList<PokemonMoveWithMetaData> = arrayListOf()
    for (move in pokemonWithMovesAndMetaData.moves) {
        for (metaData in pokemonWithMovesAndMetaData.pokemonMoveMetaData) {
            if (move.name == metaData.moveName) {
                movesWithMetaDataList.add(
                    PokemonMoveWithMetaData(
                        metaData, move
                    )
                )
            }
        }
    }
    setPokemonMoves(movesWithMetaDataList.separateByGeneration())
    

    我试过很多东西,我想我需要一个过滤器,然后一个地图,但我很难找到它,名单可以不同的大小

    val movesWithMetaDataList = pokemonWithMovesAndMetaData.moves.flatMap { move ->
        pokemonWithMovesAndMetaData.pokemonMoveMetaData.map { metaData -> 
            if (metaData.moveName == move.name){
                PokemonMoveWithMetaData(
                    metaData, move
                )
            }
        }
    }
    

    还有这个

    val movesWithMetaDataList = pokemonWithMovesAndMetaData.moves.flatMap { move ->
        pokemonWithMovesAndMetaData.pokemonMoveMetaData.takeWhile {
            pokemonMoveMetaData -> move.name == pokemonMoveMetaData.moveName
        }.map { meta ->
            PokemonMoveWithMetaData(
                meta , move
            )
        }
    }
                
    

    以及其他

    1 回复  |  直到 4 年前
        1
  •  2
  •   marstran    4 年前

    我想应该是这样的:

    val movesWithMetaDataList = pokemonWithMovesAndMetaData.moves
        .flatMap { move -> 
            pokemonWithMovesAndMetaData.pokemonMoveMetaData
                .filter { it.moveName == move.name }
                .map { PokemonMoveWithMetaData(it, move) }
        }
    

    filter ,然后我使用 map 创造 PokemonMoveWithMetaData 从那些里面。这个 flatMap 函数将为每个move/元数据对创建的列表展平为单个结果列表。