私は最近、次のコードに出くわしました。
IntPredicate neg = x -> x <- x;
これは何ですか、ある種の逆ダブルラムダ?
_-> <-
_演算子はありません。最初の_->
_は、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);
を使用する必要があります。