Inner class FSDir constructor is doing duplicate iterations over the listed files in the passed directory. We can optimize this to single loop and also we can avoid isDirectory check which will perform some native invocations.
Consider a case: one directory has only one child directory and 10000 files.
1) First loop will get the number of children directories.
2) if (numChildren > 0) , This condition will satisfy and again it will iterate 10001 times and also will check isDirectory.