タイトルの通りです。
MapのValueのAny?のnullチェックをしてnullを除去し
Map<String, Any> として返したいです。
スマートなやり方はありますでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
mapNotNullを使うとシンプルに書けます。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map-not-null.html
kotlin
1map.mapNotNull { (key, value) -> value?.let { key to value } }.toMap()
投稿2018/07/28 04:07
総合スコア3131
0
ベストアンサー
ベタですが。
Any?っぽい(失敗)
kotlin
1val map = (元データ) 2val notNullMap = map.filter {it.value != null}
たぶんAny
kotlin
1val notNullMap = map.filter {it.value != null}.map {Pair(it.key, it.value ?: "null?!")}.toMap()
nullはじいて、アンラップしながらPairにして、Mapに戻してます。
(強制アンラップ!!
はアレなので、一応?:
にしてます)
投稿2018/07/27 07:28
編集2018/07/27 08:22総合スコア16731
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
これ Any になってないかも。Kotlinってどうやって型調べるんだったか‥。
2018/07/27 08:23
回答に追記しました。
型の調べ方募集中ですw
2018/07/27 09:11
ありがとうございました。
.map { Pair (...
のPairが思いつきませんでした。うまくいきました。
filterについてはfilterValuesでvalueに限定してfilterさせました。
```
.filterValues { it != null }.map { Pair(it.key, it.value!!) }.toMap()
```
nullではないことを保証してるので強制アンラップにしました。
※保証されるなら強制アンラップに抵抗がない人です。
?: にすると不到達コードが増えてブランチカバレッジが下がってしまうので。
2018/07/27 09:24
nullチェック〜アンラップ辺りがどうにも冗長で、もっといい方法があるに違いないと信じています。
filterValuesは知らなかったので覚えておきます。(Kotlin使わないのですぐ忘れます)
強制アンラップはまぁそうですよね。気にしすぎでした。
2018/07/27 09:28
swiftの配列でいうところのflatMapですよね。そういうのがMapでできないか色々探したんですが見つからず。愚直に変換しようと思ったけどMapのジェネリクスの型の変換が思いつかず、、
でも非常に助かりました。
WebAPIのパラメータ処理を共通化するにあたってどうしてもAnyのMapを使わざるを得ない状況で。
ベストプラクティスが他にあったとしても1行直せばいいので。ありがとうございました。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。