の流れの中で二つのフィールドを合計:Javaストリーム。私はこのような何かを持っているオブジェクト
Integer totalIncome = carDealer.getBrands().stream().mapToInt(brand -> brand.getManufacturer().getIncome()).sum();
Integer totalOutcome = carDealer.getBrands().stream().mapToInt(brand -> brand.getManufacturer().getOutcome()).sum();
は、どのように私はその内の1つのストリームを書くことができますか? f.e.を収集する。 Pair<Integer, Integer>
とtotalIncome
とtotalOutcome
?
EDITED:
は、あなたのコメントみんな、回答、およびinvolvmentありがとうございます。私は、ストリームを使ってその問題への異なるアプローチについて質問します。あなたはそれについてどう思いますか:
final IncomeAndOutcome incomeAndOutcome = carDealer.getBrands()
.stream()
.map(Brand::getManufacturer)
.map(IncomeAndOutcome::of)
.reduce(IncomeAndOutcome.ZERO, IncomeAndOutcome::sum);
static class IncomeAndOutcome {
private static final IncomeAndOutcome ZERO = of(0, 0);
@Getter
private final int income;
@Getter
private final int outcome;
public static IncomeAndOutcome of(final int income, final int outcome) {
return new IncomeAndOutcome(income, outcome);
}
public static IncomeAndOutcome of(final Manufacturer manufacturer) {
return new IncomeAndOutcome(manufacturer.getIncome(), manufacturer.getOutcome());
}
IncomeAndOutcome(final int income, final int outcome) {
this.income = income;
this.outcome = outcome;
}
IncomeAndOutcome sum(final IncomeAndOutcome incomeAndOutcome) {
return of(this.income + incomeAndOutcome.getIncome(), this.outcome + incomeAndOutcome.getOutcome());
}
}
ます(totalIncome、totalOutcome)>新しいペアを<返す 'もしかして;'? –
はい、私はストリームを2回呼び出すことは効率的ではないと思います(最初は '収入'、2回目は '結果 ')。そして、私は彼らに参加して最終的に「収入」と「成果」の合計を返すただ一つの流れを得ることができるのだろうかと思っていましたか? – user3529850
ループを使い、2つのフィールドに基づいて2つの合計をインクリメントしたい場合は、繰り返します。 – Pshemo