¿Cómo puedo comprobar una condición en la takeWhile si la condición depende del valor actual y el valor anterior?

Deepa Sajani Jeyaraj:

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.

Willis Blackburn:

Sólo tiene que seguir la pista del último valor "hora" que ha visto. Recuerde que el Predicateque se pasa a que takeWhilees 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;
    }
});

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=313215&siteId=1
Recomendado
Clasificación