对于以下 Java 7 代码,
public static boolean java8Test() {
boolean flag = true;
for(int i = 67 ; i < 79 ; i++) {
if(!testBoolean(i)) {
flag = false;
}
}
return flag;
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个 Java8 代码来使用 java 8 功能对从 67 到 78(包括两者)的一系列数字执行 testBoolean 方法。
此外,java8Test()如果testBoolean返回 false,则应返回 false,但是对于给定数字范围内的所有数字,处理不应停止并继续。
我已经尝试过下面的代码,但是这段代码在返回我不想要的 false 后停止执行 testBoolean 方法。我希望继续执行并记住 java8Test 方法可以在所有数字范围执行后返回的错误标志
public static boolean java8Test() {
return IntStream.range(67, 78+1).anyMatch(index -> !testBoolean(index));
}
private static boolean testBoolean(int index) {
System.out.println(index + "\n");
switch(index) {
case 67 :
case 68 :
return false;
default :
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将 anIntStream用于所需的范围,调用testBoolean每个给您 a 的值Boolean,然后调用reduce流:
public static boolean java8Test() {
return IntStream.rangeClosed(67, 78)
.mapToObj(x -> testBoolean(x))
.reduce(Boolean.TRUE,
(aBoolean, aBoolean2) -> aBoolean && aBoolean2
);
}
Run Code Online (Sandbox Code Playgroud)
归约假设结果最初为真,并通过将“逻辑与”( &&) 与每个方法调用结合使用来组合初始值来产生最终结果testBoolean。因此,对于给定范围内的每个值,该方法都会被调用,如果任何方法调用为假,则最终结果为假,否则为真。使用方法引用时,上面的代码变成
public static boolean java8Test() {
return IntStream.rangeClosed(67, 78)
.mapToObj(Scratch::testBoolean)
.reduce(Boolean.TRUE,
Boolean::logicalAnd
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |