lambda高级用法

介绍

  • 简单整理了一些lambda的高级使用教程

定义实体示例

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyBean {
    /**
     * 省份id
     */
    private Integer provinceId;
    /**
     * 省份名称
     */
    private String provinceName;
    /**
     * 城市id
     */
    private Integer cityId;
    /**
     * 城市名称
     */
    private String cityName;
}

//模拟数据
List<MyBean> list = new ArrayList<>(10);
list.add(new MyBean(1, "广东", 11, "广州"));
list.add(new MyBean(1, "广东", 12, "深圳"));
list.add(new MyBean(1, "广东", 13, "东莞"));
list.add(new MyBean(2, "广西", 21, "南宁"));
list.add(new MyBean(2, "广西", 22, "柳州"));
list.add(new MyBean(2, "广西", 23, "桂林"));

合并

  • 需求:获取所有省份和城市id,放到一个集合中
  • flatMap,将元素进行合并
//获取所有id
Set<Integer> ids = list.stream()
        .flatMap(e -> Stream.of(e.getProvinceId(), e.getCityId()))
        .collect(Collectors.toSet());
//结果:[1, 2, 21, 22, 23, 11, 12, 13]

分组并映射

  • 需求:根据省份id分组,然后value值只需要城市id列表
  • groupBy,将元素根据安求进行分组,但是此时获取到的分组value列表是一个完整的元素对象。此时如果我们仅需要分组value列表中元素对象的某个属性时,用mapping进行转换
//根据省份id进行分组
//key:省份id,value:城市id列表
Map<Integer, List<Integer>> groupMap = list.stream()
        .collect(Collectors.groupingBy(MyBean::getProvinceId,
                Collectors.mapping(MyBean::getCityId, Collectors.toList())));
//结果:key  ->  value
//       1 -> [11, 12, 13]
//       2 -> [21, 22, 23]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值