Tengo un arrayList de la siguiente manera:
[{hours: 48, cancellationCharges: 0},
{hours: 12, cancellationCharges: 10},
{hours: 0, cancellationCharges: 20}]
Los medios de conjunto por encima de que a partir de 0 a 12 horas antes de la salida, un cargo de cancelación de 20% es aplicable. Del 12 horas a 48 horas antes de la salida, un cargo por cancelación del 10% es aplicable y más allá de 48 horas, no hay cargo por cancelación en absoluto.
Quiero un filtrado del anterior para averiguar los gastos de cancelación que se aplican más allá de un día. es decir, en el caso anterior, el resultado debería ser
[{hours: 48, cancellationCharges: 0},
{hours: 12, cancellationCharges: 10}]
Traté de filtro por la condición horas> = 24 y si el último elemento no tiene horas como 24, que reiteró de nuevo para encontrar el primer elemento con horas <24. ¿Hay una mejor manera de resolver esto. Estoy usando java12.
Sólo tiene que seguir la pista del último valor "hora" que ha visto. Recuerde que el Predicate
que se pasa a que takeWhile
es un objeto, para que pueda mantenerse en el interior del estado de la misma. Se vería algo como esto:
cancellationRules.takeWhile(new Predicate<CancellationRule> {
private int previousHours = Integer.MAX_VALUE;
public boolean test(CancellationRule rule) {
boolean result = rule.hours >= 24 || previousHours >= 24;
previousHours = rule.hours;
return result;
}
});