Java Lambda表达式

Java Lambda表达式

文章目录


  1. 集合对象单个属性抽取封装(map)

    // 抽取为Set集合
    Set<Integer> userIdSet = list.stream()
                    .map(Model::getUserId).collect(Collectors.toSet());
    // 抽取为List
    Set<Integer> userIdSet = list.stream()
                    .map(Model::getUserId).collect(Collectors.toList());              
    
  2. 集合对象多属性抽取(flatMap)

    Set<Integer> userIds = list.stream()
    				.flatMap(e -> Stream.of(e.getCreateId(), e.getUpdateId()))
    				.collect(Collectors.toSet());        
    
  3. 集合转换为Map
    第一个参数 Model::getItemId表示选择 Model的 getItemId作为map的key值;
    第二个参数 Model::getId 表示选择将原来的对象作为map的value值,如选择对象作为value值:model -> model;

    Map<Integer, Integer> map = list.stream()
    				.collect(Collectors.toMap(Model::getItemId, Model::getId);
    
  4. 集合转换为Map,键值重复获取第一个
    第三个参数 (value1, value2)-> value2) 中,如果value1与value2的key值相同,选择value1作为那个key所对应的value值。

    Map<Integer, Integer> map = list.stream()
    				.collect(Collectors.toMap(Model::getItemId, Model::getId, 
    				(value1, value2)-> value2));   
    
  5. 集合按照某个属性分组(groupingBy)

    // 按照日期分组
    Map<Integer, List<Model>> listMap = list.stream()
    				.collect(Collectors.groupingBy(Model::getDate));
    // 多次分组,先按用户id分组,在按照日期分组 
    // map:{k: 用户id, v:map:{日期时间戳,对象}}
    Map<Integer, Map<Integer, List<Model>>> = list.stream()
    				.collect(Collectors.groupingBy(Model::getUserId, 
    						 Collectors.groupingBy(Model::getDate)));
    // 按照用户id分组,value抽取对象某个属性
    // map:{k:用户id, v: 角色id集合}
    Map<Integer, Set<Integer>> = list.stream()
    				.collect(Collectors.groupingBy(Model::getUserId,
    					Collectors.mapping(Model::getRoleId, Collectors.toSet())));
    // 角色id分组,value为对象map
    // map:{k: 角色id, v: map:{用户id, 日期}}
    Map<Integer, Map<Integer, Integer>> = list.stream()
    				.collect(Collectors.groupingBy(Model::getRoleId, 
    				Collectors.toMap(Model::getUserId, Model::getDate)));
    // 内部类对象处理,内部类为静态类才可以使用
    Map<Integer, List<Model.Offer>> orderIdMap = offerList.stream()
    				.collect(Collectors.groupingBy(Model.Offer::getOrderId));
    // 商品sku数量累加 k: 商品sku, v: 商品数量 
    Map<String, DoubleSummaryStatistics> repeatSkuMap = tradeDtDTOList.stream()
                   	.collect(Collectors.groupingBy(Model::getSku,
                   Collectors.summarizingDouble(Model::getNum)));
    // 统计常用方法,浮点数用:DoubleSummaryStatistics,整型用:IntSummaryStatistics
    DoubleSummaryStatistics value = entry.getValue();
    System.out.println("最大值 : " + value.getMax());	    
    System.out.println("最小值 : " + value.getMin());
    System.out.println("累加 : " + value.getSum());
    System.out.println("平均值 : " + value.getAverage());
    
  6. 其他常用表达式

    // 整型集合累加
    Integer sum = list.stream().mapToInt((s) -> s).sum();
    // 集合过滤后数据size
    // 获取用户状态为1的数据size
    long count = list.stream().filter((Model model) -> 
    					model.getStaus.equals(1)).count();
    // 字符集合转为整型集合
    List<Integer> intList = stringList.stream()
    					.map(String::valueOf).map(Integer::valueOf)
    					.collect(Collectors.toList()));
    // NULl值判断处理,为null赋值0
    Map<Integer, Integer> map = list.stream().collect(Collectors.toMap(Model::getId,
                         e -> Optional.ofNullable(e.getId()).orElse(0)));
    // 获取最大时间记录
    Model model = list.stream().max(Comparator.comparing(Model::getTime)).get();
    // 获取最小时间记录
    Model model = list.stream().min(Comparator.comparing(Model::getTime)).get();
    
  7. 过滤

    // 获取用户id大于50 小于100用户数据集合
    List<Model> newList = list.stream().filter((Model model) -> 
    					model.getUseId() < 100 || model.getUserId > 50)
                        .collect(Collectors.toList());
    
  8. list集合数据截取

    // 获取前3条数据
    List subList = list.stream().limit(3).collect(Collectors.toList());
    // 跳过前3条数据
    List subList = list.stream().skip(3).collect(Collectors.toList());
    // 根据下标截取数据,也可以集合分页处理
    List subList = list.stream().limit(20).skip(10).collect(Collectors.toList());
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值