code: public UnsortedGrouping<T> groupBy(String... fields) {
  		return new UnsortedGrouping<>(this, new Keys.ExpressionKeys<>(fields, getType()));
  	}
docs: Groups a {@link DataSet} using field expressions. A field expression is either the name of a public field
  or a getter method with parentheses of the {@link DataSet}S underlying type. A dot can be used to drill down
  into objects, as in {@code "field1.getInnerField2()" }.
  This method returns an {@link UnsortedGrouping} on which one of the following grouping transformation
  can be applied.
  <ul>
  <li>{@link UnsortedGrouping#sortGroup(int, org.apache.flink.api.common.operators.Order)} to get a {@link SortedGrouping}.
  <li>{@link UnsortedGrouping#aggregate(Aggregations, int)} to apply an Aggregate transformation.
  <li>{@link UnsortedGrouping#reduce(org.apache.flink.api.common.functions.ReduceFunction)} to apply a Reduce transformation.
  <li>{@link UnsortedGrouping#reduceGroup(org.apache.flink.api.common.functions.GroupReduceFunction)} to apply a GroupReduce transformation.
  </ul>
  
  @param fields One or more field expressions on which the DataSet will be grouped.
  @return A Grouping on which a transformation needs to be applied to obtain a transformed DataSet.
  
  @see Tuple
  @see UnsortedGrouping
  @see AggregateOperator
  @see ReduceOperator
  @see org.apache.flink.api.java.operators.GroupReduceOperator
  @see DataSet