/** * Finds the maximum date. * * @param fieldName the field to look for the maximum date. If fieldName is not of Date type, an * exception is thrown. * @return if no objects exist or they all have {@code null} as the value for the given date * field, {@code null} will be returned. Otherwise the maximum date is returned. When * determining the maximum date, objects with {@code null} values are ignored. * @throws java.lang.IllegalArgumentException if fieldName is not a Date field. */ public Date maxDate(String fieldName) { realm.checkIfValid(); long columnIndex = table.getColumnIndex(fieldName); if (table.getColumnType(columnIndex) == RealmFieldType.DATE) { return table.maximumDate(columnIndex); } else { throw new IllegalArgumentException(String.format(TYPE_MISMATCH, fieldName, "Date")); } }
// aux. method used by sort methods private long getColumnIndex(String fieldName) { if (fieldName.contains(".")) { throw new IllegalArgumentException( "Sorting using child object properties is not supported: " + fieldName); } long columnIndex = table.getColumnIndex(fieldName); if (columnIndex < 0) { throw new IllegalArgumentException(String.format("Field '%s' does not exist.", fieldName)); } return columnIndex; }
/** * Returns the average of a given field. * * @param fieldName the field to calculate average on. Only number fields are supported. * @return the average for the given field amongst objects in query results. This will be of type * double for all types of number fields. If no objects exist or they all have {@code null} as * the value for the given field, {@code 0} will be returned. When computing the average, * objects with {@code null} values are ignored. * @throws java.lang.IllegalArgumentException if the field is not a number type. */ public double average(String fieldName) { realm.checkIfValid(); long columnIndex = table.getColumnIndex(fieldName); switch (table.getColumnType(columnIndex)) { case INTEGER: return table.averageLong(columnIndex); case DOUBLE: return table.averageDouble(columnIndex); case FLOAT: return table.averageFloat(columnIndex); default: throw new IllegalArgumentException( String.format(TYPE_MISMATCH, fieldName, "int, float or double")); } }