Why filter and map on empty traversable throws npe


#1

Wouldn’t it make sense to just return list as it is? i.e. empty. Scala doesn’t like Nulls then why be in situation to throw NPE ?


#2

Can you show some code to illustrate what you mean? As far as I know filtering or mapping an empty collection should not throw exceptions.


#4

Can you post some example code? Something else must be going on,
because plain empty Traversables don’t throw when you map of filter them:


#5

That’s true.

val path = "/path/that/exists/but/have/no/files/in/it"
val files = new File(path).listFiles() //this is fine but is null
Array[File]().filter(_.isDirectory()) // works fine
files.filter(_.isDirectory()) //fails because files is null now

I guess I should wrap java lib calls with Option


#6

The docs for java.io.File.listFiles() say:

“If this abstract pathname does not denote a directory, then this
method returns null. Otherwise an array of File objects
is returned, one for each file or directory in the directory.”

For the record, I would prefer java.nio.* to java.io.*


#7

It’s sad, but yeah – that’s nearly always a good idea…