1. ホーム
  2. java

-> <-演算子は何をするのですか?

2023-10-19 16:25:33

質問

最近、以下のようなコードに出会いました。

IntPredicate neg = x -> x <- x;

なんだこれ、逆ダブルラムダみたいなもんか?

どのように解決するのですか?

には -> <- という演算子があります。その最初の -> はJava 8で導入されたラムダ構文にすぎず、2番目の <- は「より小さい」の誤解を招くような連結です。 < と 'unary minus' の連結です。 - .

と読むことができます。 IntPredicate neg = (x) -> (x < (-x)); と読むことができます。 x よりも小さいかどうかを調べます。 -x というのは、すべて(まあ。 最も ) の負数の場合であり、そのため 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); .