Stream常用方法

  1. List to Map

    // 1.groupingBy :自定义 key 和 value
    // 例子:key:id+memberId, value: memberId List
    Map> customGroupByMap = users.stream().collect(
               Collectors.groupingBy(e -> e.getId() + e.getMemberId(), Collectors.mapping(User::getMemberId, Collectors.toList())
               ));
    
    // 2.groupingBy : normal
    // 例子:key:memberId, value: User List
    Map> normalGroupByMap = users.stream()
               .filter(key -> key.getName() != null)
               .collect(Collectors.groupingBy(e -> e.getName(), Collectors.toList()));
    
    // 3.to Map 注意:key必须不能重复,重复会爆错
    Map userIdMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity()));
    Map otherWrite = users.stream().collect(Collectors.toMap(User::getId, e->e));
    
    // 4.to Map key可以重复. 最后一个参数方法可自定义
    Map keyCanBeDuplicate = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (value1, value2) -> value2));
    
    // 5.用toMap的形式 实现 groupingBy
    Map> toMapEqualsGroupBy = users.stream().collect(Collectors.toMap(User::getId, Collections::singletonList,
               (e1, e2) -> {
                   List userList = new ArrayList<>();
                   userList.addAll(e1);
                   userList.addAll(e2);
                   return userList;
    }));
    
  2. reduce 金额相加

    bargainHelps.stream().map(e -> e.getHelpBargainAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
    
  3. 根据属性去重 (对象的单个属性)

    List unique = books.stream().collect(
                    Collectors.collectingAndThen(Collectors.toCollection(
                            () -> new TreeSet<>(Comparator.comparing(o -> o.id))), ArrayList::new)
    

    对象的多个属性

            List distinctErr = err.stream()
                    .collect(
                            Collectors.collectingAndThen(
                                    Collectors.toCollection(
                                            () -> new TreeSet<>(Comparator.comparing(o -> o.getAirline() + "_" + o.getCabinCode() + "_" + o.getChannelInfo().getSuppChannelName()))
                                    ), ArrayList::new)
                    );
    
  4. 对集合的每个元素进行操作,但不消费

    cacheList.getFlightList().stream().peek(f -> f.setCabinList(null)).collect(Collectors.toList());
    
  5. Map key进行排序

    Map> sortPrizes 
     = perPriorityPrizes.entrySet().stream()
           .sorted(Map.Entry.comparingByKey())
           .collect(
        Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)
         );
    
  6. 排序:多个字段排序

    ossPicinfo.sort((BannerOssPicInfoDto o1, BannerOssPicInfoDto o2) -> {
     if (o1.getPicOrder().equals(o2.getPicOrder())) {
         return o1.getAddTime().compareTo(o2.getAddTime());
     } else {
         return o1.getPicOrder().compareTo(o2.getPicOrder());
     }
    });
    
  7. 排序:String字段排序 小心数字 是一位一位比较的

  8. 排序:对象的多个属性排序

    List users = new ArrayList<>();
    users.add(new User(6, "2"));
    users.add(new User(2,"2"));
    users.add(new User(4,"4"));
    
    users.sort(Comparator.comparing((User u) -> new BigDecimal(u.getName())).thenComparing(user -> user.getId()));
    
  9. List to Map

    // Collectors.toMap 
    Map map = pickupDayTimeCfgBOS.stream().collect(Collectors.toMap(PickupDayTimeCfgBO::getPickup, e -> e))
    

你可能感兴趣的:(Stream常用方法)