我有一个数组列表如下:
[{hours: 48, cancellationCharges: 0},
{hours: 12, cancellationCharges: 10},
{hours: 0, cancellationCharges: 20}]
以上数组表示出发前0至12小时,收取20%的取消费。出发前 12 小时至 48 小时,收取 10% 的取消费用,超过 48 小时,则不收取取消费用。
我想过滤以上内容以找出适用于超过一天的取消费。即,在上述情况下,结果应该是
[{hours: 48, cancellationCharges: 0},
{hours: 12, cancellationCharges: 10}]
我尝试按条件小时数 >= 24 进行过滤,如果最后一个元素的小时数不是 24,我再次迭代以找到小时数 < 24 的第一个元素。有没有更好的方法来解决这个问题。我正在使用 java12。
最佳答案
您只需要跟踪您看到的最后一个“小时”值。请记住,您传递给 takeWhile
的 Predicate
是一个对象,因此您可以将状态保存在其中。它看起来像这样:
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;
}
});
关于java - 如果条件取决于当前值和先前值,我如何检查 takeWhile 中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58237322/