ディーパSajani Jeyaraj:
次のように私は、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を使用しています。
ウィリスブラックバーン:
あなたはちょうどあなたが見た最後の「時間」の値を追跡する必要があります。ことを忘れないでください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;
}
});