リスト (またはマップ内の値) があり、各アイテムに対して操作を実行したいとします。残念ながら、何らかの理由で、この値のリストには null が含まれる可能性があります。
scala> val players = List("Messi", null, "Xavi", "Iniesta", null)
players: List[java.lang.String] = List(Messi, null, Xavi, Iniesta, null)
NPE で爆発しないようにするには、次のことを行う必要があります。
scala> players.filterNot(_ == null ).map(_.toUpperCase)
res84: List[java.lang.String] = List(MESSI, XAVI, INIESTA)
これを行うより良い方法はありますか?
理想的には次のようなものです:
players.safeMap(_.toUpperCase)
scala-language メーリング リストで、Simon は次のように提案しました。
players.filter ( null !=).map(_.toUpperCase )
これは私のオリジナル テイクの短いバージョンであり、専用の方法を使わずにできる限り短いものです。
さらに良いことに、Stefan と Kevin は遅延プロキシを返すメソッド withFilter を提案したので、両方の操作をマージできます。
players.withFilter ( null !=).map(_.toUpperCase )