函数式编程-聚合计算

1、聚合计算

  @Test
    public void givenUsers_withSimpleSolarFunction_thenGetResult() {
        double avg = userList.stream().collect(averagingDouble(User::getAge));
        assertEquals((30 + 32 + 41) /3.0, avg);
        int sum = userList.stream().collect(summingInt(User::getAge));
        assertEquals((30 + 32 + 41), sum);
        DoubleSummaryStatistics stat = userList.stream().collect(summarizingDouble(User::getAge));
        assertEquals((30 + 32 + 41.0), stat.getSum());
        assertEquals((30 + 32 + 41) /3.0, stat.getAverage());
    }

2、分组,groupingBy

 @Test
    public void givenUsers_whenGroupingByAge_thenGetStatWithStream() {
        Map<Integer, DoubleSummaryStatistics> map = userList.stream().collect(
                groupingBy(
                        user -> (int) Math.floor(user.getAge() / 10.0) * 10,
                        summarizingDouble(User::getAge)
                )
        );
        log.debug("result: {}", map);
        assertEquals(2, map.get(30).getCount());
        assertEquals(32, map.get(30).getMax());
        assertEquals(30, map.get(30).getMin());
        assertEquals(31, map.get(30).getAverage());
        assertEquals(62, map.get(30).getSum());
    }

3、参数类型转换,mapping

@Test
    public void givenUsers_whenGroupingByAge_thenGetListWithStream() {
        Map<Integer, List<UserDto>> result = userList.stream().collect(
                groupingBy(
                        user -> (int) Math.floor(user.getAge() / 10.0) * 10,
                        mapping(
                                user -> new UserDto(
                                        user.getId(),
                                        user.getUsername() + ":" + user.getName()
                                ),
                                toList()
                        )
                )
        );
        log.debug("result: {}", result);
    }
    
@Test
    public void givenStrings_thenMappingAndFiltering_theChainThemTogether() {
        List<String> strings = List.of("bb", "ddd", "cc", "a");
        Map<Integer, TreeSet<String>> result = strings.stream()
                .collect(groupingBy(
                        String::length,
                        mapping(
                                String::toUpperCase,
                                filtering(
                                        s -> s.length() > 1,
                                        toCollection(TreeSet::new)
                                )
                        )
                ));
        log.debug("result: {}", result);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值