Consider this piece of code:
private static ArrayList<Level> levels = new ArrayList<>();
static {
try (Stream<Path> paths = Files.walk(Paths.get("levels"))) {
paths
.filter(Files::isRegularFile)
.forEach(levels.add(new Level(file))); //CAN'T DO!!
} catch (IOException e) {
e.printStackTrace();
}
}
I think the code pretty much says what I'm trying to do. I found this piece of code somewhere and I tried to apply it, to create Level objects from folder with files such as level1.txt
, level2.txt
, etc. The Level
class takes a File
as argument.
The forEach
method gives out a SyntaxError.
filter
method?The following explains well what is :: (double colon)
operator since Java 8
Code can be run written on several lines, but this is same as the following. Your calling the method filter
then calling forEach
on the object returned by filter
paths.filter(Files::isRegularFile).forEach(levels.add(new Level(file)));
Get it work, you need to define file
variable this is done with lambda functions
paths.filter(Files::isRegularFile).forEach(file -> levels.add(new Level(file)));
NOT POSSIBLE because walks() throws IOException
In case you don't need the try/catch
you can use Collectors
to directly build the list
private static ArrayList<Level> levels = Files.walk(Paths.get("levels"))
.filter(Files::isRegularFile)
.map(file -> new Level(file))
.collect(Collectors.toList());