33

100 万回目の経験として、SQLINの演算子と同様に、Java で演算子を使用したいと思っていました。INコンパイラのシンタックス シュガーとして実装できます。したがって、この

if (value in (a, b, c)) {
}
else if (value in (d, e)) {
}

...本当に素晴らしいでしょう。実際、上記はかなり冗長な (プリミティブには適応されていない) 構成と同じです。

if (Arrays.asList(a, b, c).contains(value)) {
}
else if (Arrays.asList(d, e).contains(value)) {
}

またはint、 、longおよび同様のタイプの場合は次のようにします。

switch (value) {
  case a:
  case b:
  case c:
    // ..
    break;

  case d:
  case e:
    // ..
    break;
 }

あるいは、さらに効率的な実装があるかもしれません。

質問:

このようなものは Java 8 の一部になる予定ですか? そうでない場合、どうすればそのような提案をすることができますか? または、今すぐ使用できる同等の構造はありますか?

4

5 に答える 5

21

それを行うためのヘルパー メソッドを記述できます。

public static <T> boolean isIn(T t, T... ts) {
    for(T t2: ts) 
      if (t.equals(t2)) return true;
    return false;
}

// later
if (isIn(value, a,b,c)) {

} else if (isIn(value, d,e)) {

}
于 2011-09-12T16:25:13.367 に答える
14

op4j の使用:

Op.onListFor(a,b,c).get().contains(value);

Is同じアプローチを使用して、メソッドでヘルパー クラスを作成できますin

class Is<T> {
    private T value;

    public Is( T value ) { this.value = value; }

    public boolean in( T... set ) {
        for( T item : set ) {
            if( value.equals( item ) ) {
                return true;
            }
        }

        return false;
    }

    public static <T> Is<T> is( T value ) {
        return new Is<T>( value );
    }
}

静的インポートを使用すると、次のように記述できます。

if(is(value).in(a,b,c)) {
}
于 2011-11-08T13:58:19.170 に答える
7

コレクション リテラルの非常に古い提案がありました。

現在、 にSets.newHashSetかなり似た Guava がありArrays.asListます。

于 2011-09-12T16:02:16.043 に答える
6

Java Community Processを探しています

于 2011-09-12T15:54:02.273 に答える
1

あなた自身が指摘したように、これを行う方法はすでに複数あるので(スイッチを使用するなど)、IN演算子のようなものが利用可能になるとは思えません。

そして、project-coinとJ8の要件リストはすでに完全にロードされており、このようなものを検討する必要があると思います。

于 2011-09-12T16:00:09.233 に答える