Tôi có một cái gì đó như thế này:Luồng Java. Tổng hợp hai lĩnh vực trong một dòng của các đối tượng
Integer totalIncome = carDealer.getBrands().stream().mapToInt(brand -> brand.getManufacturer().getIncome()).sum();
Integer totalOutcome = carDealer.getBrands().stream().mapToInt(brand -> brand.getManufacturer().getOutcome()).sum();
Làm thế nào tôi có thể viết rằng trong một dòng? để thu thập f.e. Pair<Integer, Integer>
với totalIncome
và totalOutcome
?
EDITED:
Thank you guys để bình luận, câu trả lời của bạn, và involvment. Tôi sẽ có một câu hỏi về cách tiếp cận khác nhau cho vấn đề đó bằng cách sử dụng các luồng. Bạn nghĩ gì về điều đó:
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());
}
}
Ý của bạn là 'trở lại mới Pair <> (totalIncome, totalOutcome); '? –
Có, nhưng tôi nghĩ luồng gọi hai lần không hiệu quả (lần đầu tiên là 'thu nhập' và lần thứ hai cho 'kết quả'). Và tôi đã tự hỏi liệu tôi có thể tham gia cùng họ để cuối cùng chỉ nhận được một luồng trả lại tổng thu nhập và tổng của 'kết quả'? – user3529850
Nếu bạn muốn bạn lặp lại một lần sử dụng cho vòng lặp và tăng hai khoản tiền dựa trên hai trường. – Pshemo