import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.Month;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Ideone
{
public static void main
(String[] args
) {
List
<Invoice
> invoiceListForMonth
= Arrays.
asList( new Invoice
(LocalDate.
of(2018, Month.
JULY, 01
),
BigDecimal.
valueOf(10_000
)),
new Invoice
(LocalDate.
of(2018, Month.
JULY,
28),
BigDecimal.
valueOf(500)),
new Invoice
(LocalDate.
of(2018, Month.
JULY, 01
),
BigDecimal.
valueOf(700)),
new Invoice
(LocalDate.
of(2018, Month.
JULY,
28),
BigDecimal.
valueOf(4500)),
new Invoice
(LocalDate.
of(2018, Month.
JULY,
15),
BigDecimal.
valueOf(8960)),
new Invoice
(LocalDate.
of(2018, Month.
JULY,
15),
BigDecimal.
valueOf(14450)) );
Map<LocalDate, List<Invoice>> grouping =
invoiceListForMonth.stream()
.collect(Collectors.groupingBy(Invoice::getPurchaseDate));
Map<LocalDate, BigDecimal> result = grouping.entrySet().stream()
e -> e.getValue().stream().map(Invoice::getPrice)
);
result.
forEach((k, v
) -> System.
out.
println(k
+ " : " + v
)); }
}
class Invoice {
private LocalDate purchaseDate;
public Invoice() {
}
public Invoice
(LocalDate purchaseDate,
BigDecimal price
) { this.purchaseDate = purchaseDate;
this.price = price;
}
public LocalDate getPurchaseDate() {
return purchaseDate;
}
public void setPurchaseDate(LocalDate purchaseDate) {
this.purchaseDate = purchaseDate;
}
return price;
}
this.price = price;
}
}
aW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwppbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZTsKaW1wb3J0IGphdmEudGltZS5Nb250aDsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5NYXA7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CgoKY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSAKCXsKCQlMaXN0PEludm9pY2U+IGludm9pY2VMaXN0Rm9yTW9udGggPSBBcnJheXMuYXNMaXN0KAoJCSAgICAgICAgbmV3IEludm9pY2UoTG9jYWxEYXRlLm9mKDIwMTgsIE1vbnRoLkpVTFksIDAxKSwgQmlnRGVjaW1hbC52YWx1ZU9mKDEwXzAwMCkpLAoJCSAgICAgICAgbmV3IEludm9pY2UoTG9jYWxEYXRlLm9mKDIwMTgsIE1vbnRoLkpVTFksIDI4KSwgQmlnRGVjaW1hbC52YWx1ZU9mKDUwMCkpLAoJCSAgICAgICAgbmV3IEludm9pY2UoTG9jYWxEYXRlLm9mKDIwMTgsIE1vbnRoLkpVTFksIDAxKSwgQmlnRGVjaW1hbC52YWx1ZU9mKDcwMCkpLAoJCSAgICAgICAgbmV3IEludm9pY2UoTG9jYWxEYXRlLm9mKDIwMTgsIE1vbnRoLkpVTFksIDI4KSwgQmlnRGVjaW1hbC52YWx1ZU9mKDQ1MDApKSwKCQkgICAgICAgIG5ldyBJbnZvaWNlKExvY2FsRGF0ZS5vZigyMDE4LCBNb250aC5KVUxZLCAxNSksIEJpZ0RlY2ltYWwudmFsdWVPZig4OTYwKSksCgkJICAgICAgICBuZXcgSW52b2ljZShMb2NhbERhdGUub2YoMjAxOCwgTW9udGguSlVMWSwgMTUpLCBCaWdEZWNpbWFsLnZhbHVlT2YoMTQ0NTApKQoJCSk7CgkJTWFwPExvY2FsRGF0ZSwgTGlzdDxJbnZvaWNlPj4gZ3JvdXBpbmcgPQoJCSAgICAgICAgaW52b2ljZUxpc3RGb3JNb250aC5zdHJlYW0oKQoJCSAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLmdyb3VwaW5nQnkoSW52b2ljZTo6Z2V0UHVyY2hhc2VEYXRlKSk7CgkJCgkJTWFwPExvY2FsRGF0ZSwgQmlnRGVjaW1hbD4gcmVzdWx0ID0gZ3JvdXBpbmcuZW50cnlTZXQoKS5zdHJlYW0oKQoJCSAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy50b01hcChNYXAuRW50cnk6OmdldEtleSwKCQkgICAgICAgICAgICAgICAgZSAtPiBlLmdldFZhbHVlKCkuc3RyZWFtKCkubWFwKEludm9pY2U6OmdldFByaWNlKQoJCSAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoQmlnRGVjaW1hbC5aRVJPLCBCaWdEZWNpbWFsOjphZGQpKQoJCSAgICAgICAgKTsKCQkKCQlyZXN1bHQuZm9yRWFjaCgoaywgdikgLT4gU3lzdGVtLm91dC5wcmludGxuKGsgKyAiIDogIiArIHYpKTsKCX0KfQoKY2xhc3MgSW52b2ljZSB7CgkgICAgcHJpdmF0ZSBMb2NhbERhdGUgcHVyY2hhc2VEYXRlOwoJICAgIHByaXZhdGUgQmlnRGVjaW1hbCBwcmljZTsKCQoJICAgIHB1YmxpYyBJbnZvaWNlKCkgewoJICAgIH0KCQoJICAgIHB1YmxpYyBJbnZvaWNlKExvY2FsRGF0ZSBwdXJjaGFzZURhdGUsIEJpZ0RlY2ltYWwgcHJpY2UpIHsKCSAgICAgICAgdGhpcy5wdXJjaGFzZURhdGUgPSBwdXJjaGFzZURhdGU7CgkgICAgICAgIHRoaXMucHJpY2UgPSBwcmljZTsKCSAgICB9CgkKCSAgICBwdWJsaWMgTG9jYWxEYXRlIGdldFB1cmNoYXNlRGF0ZSgpIHsKCSAgICAgICAgcmV0dXJuIHB1cmNoYXNlRGF0ZTsKCSAgICB9CgkKCSAgICBwdWJsaWMgdm9pZCBzZXRQdXJjaGFzZURhdGUoTG9jYWxEYXRlIHB1cmNoYXNlRGF0ZSkgewoJICAgICAgICB0aGlzLnB1cmNoYXNlRGF0ZSA9IHB1cmNoYXNlRGF0ZTsKCSAgICB9CgkKCSAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRQcmljZSgpIHsKCSAgICAgICAgcmV0dXJuIHByaWNlOwoJICAgIH0KCQoJICAgIHB1YmxpYyB2b2lkIHNldFByaWNlKEJpZ0RlY2ltYWwgcHJpY2UpIHsKCSAgICAgICAgdGhpcy5wcmljZSA9IHByaWNlOwoJICAgIH0KCX0=