code: public List<String> list(String path) {
          ZipEntry entry;
          Enumeration<? extends ZipEntry> e;
          String name;
          String separator;
          String prefix;
          int length;
          List<String> result;
          int idx;
  
          e = zip.entries();
          separator = Filesystem.SEPARATOR_STRING;
          prefix = path.length() == 0 ? "" : path + separator;
          length = prefix.length();
          result = new ArrayList<>();
          while (e.hasMoreElements()) {
              entry = e.nextElement();
              name = entry.getName();
              if (name.length() > length && name.startsWith(prefix)) {
                  idx = name.indexOf(separator, length);
                  name = (idx == -1 ? name : name.substring(0, idx));
                  if (!result.contains(name) && name.length() > 0 /* happens for "/" entries ... */) {
                      result.add(name);
                  }
              }
          }
          return result;
      }
docs: TODO: cache?