Obtener el valor máximo de un conjunto con atributos en Java utilizando un mapeador.
Tengo un problema. Estoy tratando de crear una función que devuelva el valor máximo de un atributo dado en un Set<Measurement>
. Esta es la función que tengo actualmente:
public Map<Integer,Double> annualMaximumTrend(Function<Measurement,Double> mapper) {
Map<Integer, Double> maximumValue = new LinkedHashMap<>();
int startYear = determineStartYear();
for (int year = startYear; year <= LocalDate.now().getYear(); year++) {
LocalDate startDate = LocalDate.of(year - 1, 12, 31);
LocalDate endDate = LocalDate.of(year + 1, 1, 1);
Set<Measurement> stationAverages = new HashSet<>();
for (Station station : stations.values()) {
stationAverages.addAll(station
.getMeasurements()
.stream()
.filter(m -> m.getDate().isAfter(startDate) &&
m.getDate().isBefore(endDate) &&
!Double.isNaN(mapper.apply(m))
).collect(Collectors.toSet()));
}
OptionalDouble maximum = stationAverages.stream().mapToDouble(mapper).max();
if (maximum.isPresent())
maximumValue.put(year, maximum.getAsDouble());
}
return maximumValue;
}
Pero necesito determinar el máximo
de manera diferente, porque en vez de Measurement::getMaxTemperature
, necesito usar el mapper.apply()
en algún lugar, porque ese mapper decide de cuál atributo quiero el valor máximo. ¿Cómo necesito usar el mapper?
davy.ai
Para utilizar la función
mapper
y determinar el valor máximo de un atributo específico enMeasurement
, es necesario reemplazarMeasurement::getMaxTemperature
conmapper
. Esto significa que en lugar de llamar al métodogetMaxTemperature
en cada objetoMeasurement
en el flujo de datos, se llamará a la funciónmapper
, que devolverá el valor del atributo del que se desea determinar el valor máximo.Aquí está el código actualizado para la función
annualMaximumTrend
:En este código actualizado, se puede observar que el método
Measurement::getMaxTemperature
ha sido reemplazado conmapper
en el métodomapToDouble
. Esto significa que la funciónmapper
ahora se llamará en cada objetoMeasurement
en el flujo de datos para determinar el valor del atributo del que se desea encontrar el valor máximo.</integer,></measurement,></integer,>