I'm completely new to Java 8 and I'm trying to wrap my head around why the last test is false.
@Test
public void predicateTest() {
Predicate<Boolean> test1 = p -> 1 == 1;
Predicate<Boolean> test2 = p -> p == (1==1);
System.out.println("test1 - true: "+test1.test(true));
System.out.println("test1 - false: "+test1.test(false));
System.out.println("test2 - true: "+test2.test(true));
System.out.println("test2 - false: "+test2.test(false));
}
Output:
test1 - true: true
test1 - false: true
test2 - true: true
test2 - false: false
Your first Predicate i.e.
Predicate<Boolean> test1 = p -> 1 == 1;
can be represented as
Predicate<Boolean> test1 = new Predicate<Boolean>() {
@Override
public boolean test(Boolean p) {
return true; // since 1==1 would ways be 'true'
}
};
So irrespective of what value you pass to the above test method, it would always return true only.
On the other hand, the second Predicate i.e.
Predicate<Boolean> test2 = p -> p == (1==1);
can be represented as
Predicate<Boolean> test2 = new Predicate<Boolean>() {
@Override
public boolean test(Boolean p) {
return p; // since 'p == true' would effectively be 'p'
}
};
So whatever boolean value you would pass to the above test method, it would be returned as is.
And then you can correlate how the method test corresponding to each instance test1 and test2 of the anonymous classes are invoked and what shall be the probable output.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With