code: private void copyInternal(Map<FileInfo, URI> srcToDstItemNames) throws IOException {
      if (srcToDstItemNames.isEmpty()) {
        return;
      }
  
      String srcBucketName = null;
      String dstBucketName = null;
      List<String> srcObjectNames = new ArrayList<>(srcToDstItemNames.size());
      List<String> dstObjectNames = new ArrayList<>(srcToDstItemNames.size());
  
      // Prepare list of items to copy.
      for (Map.Entry<FileInfo, URI> srcToDstItemName : srcToDstItemNames.entrySet()) {
        StorageResourceId srcResourceId = srcToDstItemName.getKey().getItemInfo().getResourceId();
        srcBucketName = srcResourceId.getBucketName();
        String srcObjectName = srcResourceId.getObjectName();
        srcObjectNames.add(srcObjectName);
  
        StorageResourceId dstResourceId =
            pathCodec.validatePathAndGetId(srcToDstItemName.getValue(), true);
        dstBucketName = dstResourceId.getBucketName();
        String dstObjectName = dstResourceId.getObjectName();
        dstObjectNames.add(dstObjectName);
      }
  
      // Perform copy.
      gcs.copy(srcBucketName, srcObjectNames, dstBucketName, dstObjectNames);
    }
docs: Copies items in given map that maps source items to destination items.