I recently came upon the following code:
IntPredicate neg = x -> x <- x;
What is this, some sort of reverse double lambda?
I recently came upon the following code:
IntPredicate neg = x -> x <- x;
What is this, some sort of reverse double lambda?
There is no
-> <-
operator. That first->
is just lambda syntax, as introduced in Java 8, and that second<-
is a misleading concatenation of 'smaller than'<
and 'unary minus'-
.You can read it as
IntPredicate neg = (x) -> (x < (-x));
, i.e. it tests whetherx
is smaller than-x
, which is the case for all (well, most) negative numbers, hence the nameneg
.Just for completeness: This test is not only (intentionally?) hard to understand, but -- as pointed out in the comments -- it also fails for
Integer.MIN_VALUE
(which is==-Integer.MIN_VALUE
). Instead, you should probably just use the much simplerIntPredicate neg = x -> (x < 0);
.