web-dev-qa-db-ja.com

-> <-演算子は何をしますか?

私は最近、次のコードに出くわしました。

IntPredicate neg = x -> x <- x;

これは何ですか、ある種の逆ダブルラムダ?

73
fredoverflow

_-> <-_演算子はありません。最初の_->_は、Java 8で導入されたように、単なるラムダ構文であり、2番目の_<-_は、 '_<_よりも小さい'の誤解を招く連結です。 '単項マイナス' _-_。

IntPredicate neg = (x) -> (x < (-x));として読み取ることができます。つまり、xが_-x_よりも小さいかどうかをテストします。これは、すべての場合に当てはまります(まあ、 most )負の数であるため、名前は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
_

完全を期すために:このテストは(意図的に?)理解するのが難しいだけでなく、コメントで指摘されているように、_Integer.MIN_VALUE_(_==-Integer.MIN_VALUE_)でも失敗します。代わりに、おそらくもっと単純なIntPredicate neg = x -> (x < 0);を使用する必要があります。

90
tobias_k