工作经验记录

1、流去重


list.stream()l.collect(Collectors.toMap(User::getName, v -> v, (v1, v2) -> v1))
==============================================================================
list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
        () -> new TreeSet<>(Comparator.comparing(InventoryTemplate::getCode))), ArrayList::new));
=======================================================================================
Map<String, String> res = list.stream().collect(Collectors.groupingBy(Dao::getSkuId, Collectors.collectingAndThen(Collectors.toList(), list -> list.get(0).getObjectId() + getSplitFlag() + list.get(0).getId())));

inventories.stream().distinct()
                .filter(item->ObjectUtils.isNotEmpty(item.getTargetId()) && ObjectUtils.isNotEmpty(item.getGoodsLocationId()))
                .collect(Collectors.groupingBy(Inventory::getTargetId,
                        Collectors.mapping(Inventory::getGoodsLocationId, Collectors.toList())));


2、流汇总计数
list.stream().collect(Collectors.groupingBy(BubblesVo::getType, Collectors.counting()));

3、流汇总求和
list.stream().collect(Collectors.groupingBy(BubblesVo::getType, Collectors.summingInt(BubblesVo::getNum)));

4、限流

CountDownLatch countDownLatch = new CountDownLatch(templateListList.size());
String rateLimiterName = "rateLimiter:importInventory:" + UserContext.get().getCompanyId();
templateListList.forEach(templateList -> {
    new Thread(() -> {
        try {
            do();
        } catch (Exception e) {
            reDo();
        } finally {
            countDownLatch.countDown();
        }
    }).start();
    //预防OOM,最大流速 = 每1秒钟产生5个令牌[1秒5次请求]
    RRateLimiter downloadLimiter = redisson.getRateLimiter(rateLimiterName);
    downloadLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
    downloadLimiter.acquire();
});

5、list排序

升序
list.sort(Comparator.comparing(T::getSort).thenComparing(T::getCreatTime));
先升后降
list.sort(Comparator.comparing(T::getSort).thenComparing(T::getCreateTime).reversed());


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值