code: public <OUT> DataStreamSource<OUT> fromCollection(Collection<OUT> data) {
  		Preconditions.checkNotNull(data, "Collection must not be null");
  		if (data.isEmpty()) {
  			throw new IllegalArgumentException("Collection must not be empty");
  		}
  
  		OUT first = data.iterator().next();
  		if (first == null) {
  			throw new IllegalArgumentException("Collection must not contain null elements");
  		}
  
  		TypeInformation<OUT> typeInfo;
  		try {
  			typeInfo = TypeExtractor.getForObject(first);
  		}
  		catch (Exception e) {
  			throw new RuntimeException("Could not create TypeInformation for type " + first.getClass()
  					+ "; please specify the TypeInformation manually via "
  					+ "StreamExecutionEnvironment#fromElements(Collection, TypeInformation)", e);
  		}
  		return fromCollection(data, typeInfo);
  	}
docs: Creates a data stream from the given non-empty collection. The type of the data stream is that of the
  elements in the collection.
  
  <p>The framework will try and determine the exact type from the collection elements. In case of generic
  elements, it may be necessary to manually supply the type information via
  {@link #fromCollection(java.util.Collection, org.apache.flink.api.common.typeinfo.TypeInformation)}.
  
  <p>Note that this operation will result in a non-parallel data stream source, i.e. a data stream source with
  parallelism one.
  
  @param data
  The collection of elements to create the data stream from.
  @param <OUT>
  The generic type of the returned data stream.
  @return
  The data stream representing the given collection