Lambda表达式的stream使用示例

Java8的stream如果使用得当,会非常方便,竟然会有点跑sql的感觉,我将常见的几种用法总结了一下,后续再继续整理补充


  • group by 用法,注意返回的必须是个Map!可参照源码groupingBy(classifier, HashMap::new, downstream)第二个参数
if (!derateInfos.isEmpty()) {
            derateInfoMap
                    = derateInfos.stream().collect(
                            Collectors
                            .groupingBy(r->r.getLoanId(), Collectors.mapping(r->r.getRepayTerm(), Collectors.toList()))
            );
        }

  • 列表转Map
Map<Long, Warrant> warrantMap = warrants.stream().collect(Collectors.toMap(r->r.getId(),r->r));

如果想要用此方法来去重,由于key重复时会报一个“Duplicate key”的异常,因此需要在表达式中加入重复选择策略

Map<String, String> distinctProc = nodeConfigs.stream()
                .collect(Collectors.toMap(r->r.getProcKey(),r->r.getProcName(),(v1,v2)->v2));

意为当key重复时,使用后一个值v2覆盖前一个值v1


  • 提取对象属性
List<String> serviceActIds=servieNodeConfig.stream().map(r->r.getActId()).collect(Collectors.toList());
  • filter用法
List<User> collect = list.stream()
		.filter(user -> user.getAge()<30 && "女".equals(user.getSex()))
		.collect(Collectors.toList());

  • Map用法
Map<String,String> warrantParams;
Map<String,String> varsMap;
......
warrantParams.forEach((k,v)->{
            varsMap.merge(k, v, (oldValue, newValue) -> newValue); //如果遇到相同的key则取新值,这里还可以按需写更复杂的逻辑
        });

  • 排序
Comparator<RavDataschemeButton> comparator = Comparator.comparing(RavDataschemeButton::getOrderNo);
buttons.sort(comparator); //正序
buttons.sort(comparator.reversed());//倒序

  • Map排序
TreeMap<String,String> attributes= new TreeMap<String,String>((String a,String b)->a.compareTo(b));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值