code: @Nonnull
    public static ImmutableKeyValueSource<Symbol, ByteSource> fromZip(final ZipFile zipFile,
        final Function<String, Symbol> idExtractor) {
      final ImmutableMap.Builder<Symbol, String> ret = ImmutableMap.builder();
      // Build a map of the key for each file to the filename
      final Enumeration<? extends ZipEntry> entries = zipFile.entries();
      while (entries.hasMoreElements()) {
        final ZipEntry entry = entries.nextElement();
        final String name = entry.getName();
        // Skip directories
        if (entry.isDirectory()) {
          continue;
        }
        final Symbol id = checkNotNull(idExtractor.apply(name));
        ret.put(id, name);
      }
      return new ZipKeyValueSource(zipFile, ret.build());
    }
docs: Creates a new source using a zip file and a function that maps each entry in the zip file to
  a unique key. The caller must ensure that the zip file is not closed or modified, otherwise all
  behavior is undefined. All files in the zip file will be used; there is currently no way to
  exclude specific files. Use a default identity-like function that defines the mapping between
  keys and the entry used for their values, see {@link #fromZip(ZipFile)}.
  
  @param zipFile     the zip file to use as a source
  @param idExtractor a function that returns a unique id for every file contained in the zip
  @return a new key-value source backed by the specified zip file
  @see #fromZip(ZipFile)