2016-09-20 13 views
1

Scalaリストのnull要素をmapを使って空の値に置き換えようとしています。私は現在持っています:リストのnull値をScalaの別の値に置き換えます。

val arr = Seq("A:B|C", "C:B|C", null) 
val arr2 = arr.map(_.replaceAll(null, "")) 

これは私にNullPointerExpectionを与えます。これを行う最善の方法は何ですか?

+1

'map'関数を本当に理解するには、私はhttp://learnyouahaskell.com/higher-order-functionsをお勧めします。 –

答えて

9

Seqのヌル文字列を置き換えるのではなく、文字列のヌル文字を置き換えようとしています。値がそれ以外の場合はNone nullでなく、場合

val arr2 = arr.map(str => Option(str).getOrElse("")) 

OptionここSome(<your string>)が生成されますので、ここで正しい方法です。 getOrElseは、nullでない場合は文字列を返し、そうでない場合は空文字列を返します。

+1

もっと慣用的です: 'vs.mapConserve {case null =>" "case x => x}' –

+0

実際にはScalaで 'null'を直接使うことは勧められません。 – Zyoma

+0

問題のデータはすでにnullを使用しています。 'null'キーワードを使用することは禁じられていません。データを取り込むときに、このような境界に制限したいだけです。そして、APIからヌルを守るため。オプションオブジェクトは、ここで行うように不必要に作成することを避けるために、値クラスにする必要があります。その場合、あなたのexprはもっと食欲をそそるでしょう。 –

関連する問題