Kotlinで、Consul→Jackson→Mapへ

コンサルからのLIST情報をKEYとVALUEをMAPに変換してみた。

import com.github.kittinunf.fuel.httpGet
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import java.util.Base64

data class KeyValues(val CreateIndex: Integer?,
                     val ModifyIndex: Integer?,
                     val LockIndex: Integer?,
                     val Key: String?,
                     val Flags: Integer?,
                     val Value: String?)

fun main(args: Array<String>) {
    val triple = "http://localhost:8500/v1/kv/ikwhvdrm/?recurse".httpGet().response()

    val mapper = jacksonObjectMapper()

    val output:List<KeyValues> = mapper.readValue(triple.second.data)
    val map:Map<String?,String?> = output
            .filter { it.Value != null }
            .map { Pair<String?,String?>(it.Key, String(Base64.getDecoder().decode(it.Value)))}
            .toMap()

    map.forEach {k,v ->
        println("${k}:${v}")
    }
}

MAP変換部分はこちら。

    val map:Map<String?,String?> = output
            .filter { it.Value != null }
            .map { Pair<String?,String?>(it.Key, String(Base64.getDecoder().decode(it.Value)))}
            .toMap()

toMapが「public fun Iterable>.toMap(): Map defined in kotlin.collections in file MapsKt.class」なので、
IterableなPairを作るために下記を記載

            .map { Pair<String?,String?>(it.Key, String(Base64.getDecoder().decode(it.Value)))}


結果は同じだけど、うん、うん、だんだん ポイ感じになってきた。

ikwhvdrm.hatenablog.com