class Result extends ArrayList<Result> {

	public Result earliest() {
		if (isSingleResult()) {
			return this;
		}
		
		Result first = emptyResult();
		
		// default the returned result to the first item
		// in case all resultDates are null
		if (size() > 0) {
			first = get(0);
		}
		
		for (Result r : this) {
			if (r != null && r.getResultDate() != null
			        && (first.getResultDate() == null || r.getResultDate().before(first.getResultDate()))) {
				first = r;
			}
		}
		return first;
	}

	public  Result();
	public  Result(Result result);
	public  Result(List<Result> list);
	public  Result(Boolean valueBoolean);
	public  Result(Date resultDate, Boolean valueBoolean, Object obj);
	public  Result(Concept valueCoded);
	public  Result(Date resultDate, Concept valueCoded, Object obj);
	public  Result(Obs obs);
	public  Result(Date valueDatetime);
	public  Result(Date resultDate, Date valueDatetime, Object obj);
	public  Result(Double valueNumeric);
	public  Result(Date resultDate, Double valueNumeric, Object obj);
	public  Result(Integer valueNumeric);
	public  Result(Date resultDate, Integer valueNumeric, Object obj);
	public  Result(String valueText);
	public  Result(Date resultDate, String valueText, Object obj);
	public  Result(Date resultDate, Datatype datatype, Boolean valueBoolean, Concept valueCoded, Date valueDatetime,
	    Double valueNumeric, String valueText, Object object);

}