poy*_*ger 15 java lambda if-statement predicate java-8
我在一些项目中看到人们使用Predicates而不是纯if语句,如下面的一个简单示例所示:
int i = 5;
// Option 1
if (i == 5) {
// Do something
System.out.println("if statement");
}
// Option 2
Predicate<Integer> predicate = integer -> integer == 5;
if (predicate.test(i)) {
// Do something
System.out.println("predicate");
}
Run Code Online (Sandbox Code Playgroud)
更喜欢Predicate陈述的重点是什么?
Eug*_*ene 18
对于您提供的确切示例,使用谓词是一个很大的过度杀戮.编译器然后运行时将创建:
- 一种方法(脱糖谓词)
- 一个将实现java.util.Predicate的.class
- 在2处创建的类的实例
所有这些与简单的if语句相对.
所有这一切都是针对无国籍的谓词.如果您的谓词是有状态的,例如:
Predicate<Integer> p = (Integer j) -> this.isJGood(j); // you are capturing "this"
Run Code Online (Sandbox Code Playgroud)
然后每次使用此谓词时,都会创建一个新实例(至少在当前的JVM下).
当然,IMO创建这样一个谓词的唯一可行选择是在多个地方重用它(比如作为方法的参数传递).
Era*_*ran 17
使用谓词可以使您的代码更加灵活.
i == 5您可以编写一个评估a的条件,而不是编写始终检查的条件Predicate,这样就可以传递不同Predicate的条件来实现不同的条件.
例如,Predicate可以作为参数传递给方法:
public void someMethod (Predicate<Integer> predicate) {
if(predicate.test(i)) {
// do something
System.out.println("predicate");
}
...
}
Run Code Online (Sandbox Code Playgroud)
这是如何工作的filter方法Stream.
| 归档时间: |
|
| 查看次数: |
6810 次 |
| 最近记录: |