Dato il seguente codice:Tipi incompatibili: tipo di ritorno errato nell'espressione lambda?
/**
* Prints the grid with hint numbers.
*/
private void printGridHints() {
minesweeperGrid.forEach((k, v) -> {
v.stream().forEach(
square -> square.isMineLocatedHere() ? System.out.print("*") : System.out.print(square
.getNumSurroundingMines()));
System.out.println();
});
}
mio compilatore mi dà il seguente errore:
error: incompatible types: bad return type in lambda expression
square -> square.isMineLocatedHere() ? System.out.print("*") : System.out.print(square
^
missing return value
Sono in esecuzione Gradle versione 2.2, e ho JDK 8u31 installato. La cosa interessante che Eclipse non mostra alcun errore del compilatore, anche dopo aver pulito e ricostruito il mio progetto, ma quando eseguo gradle build
sulla riga di comando, ottengo questo errore del compilatore.
Perché sto ricevendo questo errore e come lo risolvo?
Grazie per la spiegazione, aioobe. La tua soluzione ha funzionato. :) –
... o 'minesweeperGrid.values (). Stream(). FlatMap (Collection :: stream) .forEach (quadrato -> ...)' poiché non sembra che la chiave sia necessaria nel corpo . (impossibile modificare il mio commento precedente :-(). –
In alternativa, è possibile sostituire 'print' con' append'. Poiché quest'ultimo restituisce un valore, può essere utilizzato con l'operatore ternario. (Ma l'istruzione 'if' è più chiaro qui però) Si noti che nella seconda soluzione che sposta l'espressione ternaria all'interno dell'invocazione di stampa, le parentesi graffe non sono necessarie. – Holger