@Override
 public PCollection<T> apply(PCollection<T> in) {
   WithKeys<IdT, T> withKeys = WithKeys.of(fn);
   if (representativeType != null) {
     withKeys = withKeys.withKeyType(representativeType);
   }
   return in.apply(withKeys)
       .apply(
           Combine.<IdT, T, T>perKey(
               new Combine.BinaryCombineFn<T>() {
                 @Override
                 public T apply(T left, T right) {
                   return left;
                 }
               }))
       .apply(Values.<T>create());
 }