BJ *_*ruz 5 java eclipse lambda java-8
给出以下代码:
/**
* 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();
});
}
Run Code Online (Sandbox Code Playgroud)
我的编译器给了我以下错误:
error: incompatible types: bad return type in lambda expression
square -> square.isMineLocatedHere() ? System.out.print("*") : System.out.print(square
^
missing return value
Run Code Online (Sandbox Code Playgroud)
我正在运行Gradle 2.2版,我安装了JDK 8u31.有趣的是Eclipse没有显示任何编译器错误,即使在我清理和重建我的项目之后,但是当我gradle build在命令行上运行时,我得到了这个编译器错误.
为什么我会收到此错误,我该如何解决?
aio*_*obe 12
您不能void在三元表达式中使用第二个和第三个表达式作为类型.即,你做不到
.... ? System.out.print(...) : System.out.print(...)
^^^^^ ^^^^^
Run Code Online (Sandbox Code Playgroud)
(如果Eclipse另有说法,那就是一个bug.)使用if语句代替:
minesweeperGrid.forEach((k, v) -> {
v.stream().forEach(
square -> {
if (square.isMineLocatedHere())
System.out.println("*");
else
System.out.println(square.getNumSurroundingMines());
})
});
Run Code Online (Sandbox Code Playgroud)
或者按如下方式细分:
minesweeperGrid.forEach((k, v) -> {
v.stream().forEach(
square -> {
System.out.println(square.isMineLocatedHere()
? "*" : square.getNumSurroundingMines())
})
});
Run Code Online (Sandbox Code Playgroud)