code: public static ViewData create(
        View view,
        Map<? extends List</*@Nullable*/ TagValue>, ? extends AggregationData> map,
        Timestamp start,
        Timestamp end) {
      Map<List</*@Nullable*/ TagValue>, AggregationData> deepCopy =
          new HashMap<List</*@Nullable*/ TagValue>, AggregationData>();
      for (Entry<? extends List</*@Nullable*/ TagValue>, ? extends AggregationData> entry :
          map.entrySet()) {
        checkAggregation(view.getAggregation(), entry.getValue(), view.getMeasure());
        deepCopy.put(
            Collections.unmodifiableList(new ArrayList</*@Nullable*/ TagValue>(entry.getKey())),
            entry.getValue());
      }
      return createInternal(
          view,
          Collections.unmodifiableMap(deepCopy),
          AggregationWindowData.CumulativeData.create(start, end),
          start,
          end);
    }
docs: Constructs a new {@link ViewData}.
  
  @param view the {@link View} associated with this {@link ViewData}.
  @param map the mapping from {@link TagValue} list to {@link AggregationData}.
  @param start the start {@link Timestamp} for this {@link ViewData}.
  @param end the end {@link Timestamp} for this {@link ViewData}.
  @return a {@code ViewData}.
  @throws IllegalArgumentException if the types of {@code Aggregation} and {@code
  AggregationData} don't match.
  @since 0.13