猿问

Java使用流按月获取订购产品的数量

我想准备一个简单的报告,按月显示订购产品的数量,如下所示(降序):


Month         Number of products

2018-10       8

2018-11       3 

我的数据:


  class Orders {


        private List<Order> orders = new ArrayList<>();


        public void prepareData() {


            Product socks = new ProductBuilder()

                    .setPrice(new BigDecimal("23"))

                    .setCategory(Category.C)

                    .setName("SOCKS")

                    .build();


            Product jacket = new ProductBuilder()

                    .setPrice(new BigDecimal("199"))

                    .setCategory(Category.A)

                    .setName("JACKET")

                    .build();


            Product watch = new ProductBuilder()

                    .setPrice(new BigDecimal("100"))

                    .setCategory(Category.B)

                    .setName("WATCH CASIO")

                    .build();



            Customer john = new CustomerBuilder()

                    .setAge(18)

                    .setName("JOHN")

                    .setSurname("JOHNSON")

                    .setEmail("john@johnson.com")

                    .build();


            Customer mike = new CustomerBuilder()

                    .setAge(20)

                    .setName("MIKE")

                    .setSurname("MAX")

                    .setEmail("mike@max.com")

                    .build();



            Order orderJohn = new OrderBuilder()

                    .setQuantity(2)

                    .setCustomer(john)

                    .setProduct(watch)

                    .setOrderDate(LocalDate.now())

                    .build();


            Order orderJohn2 = new OrderBuilder()

                    .setQuantity(4)

                    .setCustomer(john)

                    .setProduct(socks)

                    .setOrderDate(LocalDate.now())

                    .build();


慕虎7371278
浏览 151回答 2
2回答

慕妹3146593

您可以将您的替换Collectors.counting()为:Collectors.summingInt(Order::getQuantity)(它的工作原理类似:Collectors.reducing(0, Order::getQuantity, Integer::sum))编辑:查看您对另一个答案的评论,这是您需要的:Map<LocalDate, IntSummaryStatistics> ord = orders.stream().collect(Collectors.groupingBy(e -> e.getOrderDate().withDayOfMonth(1), Collectors.summarizingInt(Order::getQuantity)));ord.entrySet().stream().sorted(Map.Entry.comparingByValue((p1,p2) -> Long.compare(p2.getSum(), p1.getSum()))).forEach(System.out::println);

桃花长相依

使用Collectors.summingInt(Order::getQuantity)代替Collectors.counting()。
随时随地看视频慕课网APP

相关分类

Java
我要回答