我有一個 arrayList 如下:[{hours: 48, cancellationCharges: 0},
{hours: 12, cancellationCharges: 10},
{hours: 0, cancellationCharges: 20}]上述數(shù)組表示出發(fā)前 0 至 12 小時(shí)內(nèi),需收取 20% 的取消費(fèi)用。出發(fā)前 12 小時(shí)至 48 小時(shí)內(nèi),需支付 10% 的取消費(fèi);超過 48 小時(shí),則無需支付取消費(fèi)。我想過濾上述內(nèi)容以找出超出一天的取消費(fèi)用。即,在上述情況下,結(jié)果應(yīng)該是[{hours: 48, cancellationCharges: 0},
{hours: 12, cancellationCharges: 10}]我嘗試按條件“小時(shí)”>= 24 進(jìn)行過濾,如果最后一個元素的小時(shí)數(shù)不是 24,我會再次迭代以找到第一個小時(shí)數(shù) < 24 的元素。是否有更好的方法來解決此問題。我用的是java12。
1 回答

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