我有一個 arrayList 如下:[{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。
1 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
您只需要跟蹤您看到的最后“小時”值即可。請記住,Predicate您傳遞給的takeWhile是一個對象,因此您可以在其中保留狀態。它看起來像這樣:
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;
}
});
添加回答
舉報
0/150
提交
取消