code: @Override
      public boolean accept(Path file) {
          String name = file.getFileName().toString();
          // check exact match
          int index = Collections.binarySearch(matches, name);
          if (index >= 0) {
              return false;
          }
          // check prefix
          index = Collections.binarySearch(prefixes, name);
          if (index >= 0) {
              return false;
          }
          if (index < -1) {
              // The < 0 index gives the first index greater than name
              int firstLessIndex = -2 - index;
              String prefix = prefixes.get(firstLessIndex);
              // If name starts with an ignored prefix ignore name
              if (name.startsWith(prefix)) {
                  return false;
              }
          }
          // check suffix
          index = Collections.binarySearch(suffixes, name, reverseComparator);
          if (index >= 0) {
              return false;
          }
          if (index < -1) {
              // The < 0 index gives the first index greater than name
              int firstLessIndex = -2 - index;
              String suffix = suffixes.get(firstLessIndex);
              // If name ends with an ignored suffix ignore name
              if (name.endsWith(suffix)) {
                  return false;
              }
          }
          // everything checks out.
          return true;
      }
docs: If the filename matches any string in the prefix, suffix, or matches array, return false.  Perhaps a bit of
  overkill, but this method operates in log(n) time, where n is the size of the arrays.
  
  @param file The file to be tested
  
  @return <code>false</code> if the filename matches any of the prefixes, suffixes, or matches.