code: public synchronized void putList(
        String bucket, @Nullable String objectNamePrefix, List<GoogleCloudStorageItemInfo> items) {
      // Give all entries the same creation time so they expire at the same time.
      long creationTime = ticker.read();
      PrefixKey key = new PrefixKey(bucket, objectNamePrefix);
  
      // The list being inserted is always fresher than any child lists.
      getPrefixSubMap(itemMap, key).clear();
      getPrefixSubMap(prefixMap, key).clear();
  
      // Populate the maps.
      prefixMap.put(key, new CacheValue<Object>(null, creationTime));
      for (GoogleCloudStorageItemInfo item : items) {
        StorageResourceId itemId = item.getResourceId();
        PrefixKey itemKey = new PrefixKey(itemId.getBucketName(), itemId.getObjectName());
        CacheValue<GoogleCloudStorageItemInfo> itemValue =
            new CacheValue<GoogleCloudStorageItemInfo>(item, creationTime);
        itemMap.put(itemKey, itemValue);
      }
    }
docs: Inserts a list entry and the given items into the cache. If a list entry under the same
  bucket/objectNamePrefix is present, its expiration time is reset. If an item with the same
  resource id is present, it is overwritten by the new item.
  
  @param bucket the bucket to index the items by.
  @param objectNamePrefix the object name prefix to index the items by. If this is null, it will
  be converted to empty string.
  @param items the list of items to insert.