Erstens, den Code ändern und eine verbesserte generics for
Schleife zu verwenden. Unter der Annahme, values
wird dann eine List<DiscountValue>
, ist es das, was Sie bekommen:
List<DiscountValue> ret = new ArrayList<>(values.size());
double tmp = startPrice;
for (DiscountValue value : values) {
DiscountValue discountValue = value.apply(quantity, tmp, digits, currencyIsoCode);
tmp -= discountValue.getAppliedValue();
ret.add(discountValue);
}
Ich würde vorschlagen, mit, dass der Aufenthalt, und nicht wandeln es in Strömen, aber wenn Sie darauf bestehen, können Sie ein Ein-Element-Array als ein verwenden Werthalter.
Beachten Sie, dass ret
und tmp
nicht final
deklariert werden müssen, solange sie effektiv final sind.
List<DiscountValue> ret = new ArrayList<>(values.size());
double[] tmp = { startPrice };
values.stream().forEachOrdered(v -> {
DiscountValue discountValue = v.apply(quantity, tmp[0], digits, currencyIsoCode);
tmp[0] -= discountValue.getAppliedValue();
ret.add(discountValue);
});
Wie Sie sehen können, haben Sie durch die Verwendung von Streams nichts gewonnen. Der Code ist eigentlich schlechter, so ... nicht.
Schritt 1: Verwenden Sie Generika, nicht * roh * 'Iterator'. Warum ist 'values' eine rohe' Collection', keine generische 'Collection'? –
Andreas
Eine erweiterte for-Schleife wäre hier sinnvoller. – khelwood
Eigentlich ist das ein sehr alter Code. Ich überarbeite das ganze Paket, das vor 10 Jahren mit der neuesten Java-Version geschrieben wurde. Danke für den Vorschlag, werde das sicher tun. –