java - 如果条件取决于当前值和先前值,我如何检查 takeWhile 中的条件?

标签 java java-stream

我有一个数组列表如下:

[{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。

最佳答案

您只需要跟踪您看到的最后一个“小时”值。请记住,您传递给 takeWhilePredicate 是一个对象,因此您可以将状态保存在其中。它看起来像这样:

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/

相关文章:

java - 当值为日期时,如何使用 Java 在 JSON 字符串中添加引号

java - 没有唯一键的 TreeMap

java - 数字数字的递归总和(直到数字小于 10)仅限 java 8 lambdas

java - Stream.reduce(identity,accumulator,combiner)如何工作?

java-stream - Jenkins 管道脚本将文件复制或移动到另一个目的地

java-8 - 映射流的第一个元素与其余元素不同

java - 什么是NullPointerException,我该如何解决?

java - Windows 与 Tomcat 的集成安全性

java - 如何在java中分离字符串以满足以下要求?

java - 如何在 Java 中迭代 lambda 函数