简体   繁体   中英

What does the -> <- operator do?

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)); , ie it tests whether x is smaller than -x , which is the case for all (well, most ) negative numbers, hence the name neg .

IntPredicate neg = x -> x <- x;
System.out.println(neg.test(4));   // false
System.out.println(neg.test(0));   // false
System.out.println(neg.test(-4));  // true

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 simpler IntPredicate neg = x -> (x < 0); .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM