Search code examples
javasyntactic-sugarjlsin-operator

Java in operator


For the one millionth time, I would have liked to use an IN operator in Java, similar to the IN operator in SQL. It could just be implemented as compiler syntactic sugar. So this

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

...would really be awesome. In fact, the above is the same as the rather verbose (and not adapted for primitives) construct here:

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

Or like this for int, long and similar types:

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

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

Or maybe there could be even more efficient implementations.

Question:

Is something like this going to be part of Java 8? How can I make such a suggestion, if not? Or is there any equivalent construct that I could use right now?


Solution

  • Using op4j:

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

    Using the same approach, you could create a helper classes Is with a method 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 );
        }
    }
    

    with a static import, you can write:

    if(is(value).in(a,b,c)) {
    }