Stream.of().forEach() Error im Boolean

Palme4001

Grünschnabel
Hallo,
ich bin grade auf eine seltsame Fehlermeldung gestoßen, mit der ich nich so recht etwas anfangen kann:

code:
Java:
public boolean hitsDeathzone(){

//getPlayers() returnt ein Array welches durchlaufen werden soll
        Stream.of(map.game.pHandler.getPlayers()).forEach(player -> {
            if(player.getdZone().collides(posx, posy)){
                return true;
            }
        });
        return false;
    }

Eclipse meint nun bei "return true" in zeile 6:
"Void methods cannot return a value"

Wie kann das sein, ich hab doch üvberhaupt keine void methode, sondern einen boolean ?!
Hab ich da grundlegend bei Streams etwas falsch verstanden ?

Vielen Dank im Vorraus !
 

ComFreek

Mod | @comfreek
Moderator
Hallo,

der Fehler liegt darin, dass "return true" nicht zur Funktion "hitsDeathzone" gehört. Das Return-Statement gehört zu deinem Lambda ("player -> { ... }"). In deinem Fall ist dein Lambda als void deklariert worden (siehe Dokumentation von forEach).

Genau für deinen Anwendungsfall würde sich anyMatch eignen: http://docs.oracle.com/javase/8/doc...am.html#anyMatch-java.util.function.Predicate-

Java:
return Stream.of(map.game.pHandler.getPlayers()).anyMatch(player -> {
  return player.getdZone().collides(posx, posy);
});