javaenumsconditional-statements

Check enum for multiple values


I have an enum FileType

public static enum FileType {
  CSV, XML, XLS, TXT, FIXED_LENGTH
}

FileType fileType = FileType.CSV;

Is there a better (cleaner) way to check fileType for multiple values than the following (like "myString".matches("a|b|c");)?

if(fileType == FileType.CSV || fileType == FileType.TXT || fileType == FileType.FIXED_LENGTH) {}

Solution

  • I ended up writing a method:

    public static enum FileType {
      CSV, XML, XLS, TXT, FIXED_LENGTH;
    
      // Java < 8
      public boolean in(FileType... fileTypes) {
        for(FileType fileType : fileTypes) {
          if(this == fileType) {
            return true;
          }
        }
    
        return false;
      }
    
      // Java 8
      public boolean in(FileType... fileTypes) {
        return Arrays.stream(fileTypes).anyMatch(fileType -> fileType == this);
      }
    }
    

    And then:

    if(fileType.in(FileType.CSV, FileType.TXT, FileType.FIXED_LENGTH)) {}
    

    Nice and clean!