Stream:常用示例

单个集合

    List<Area> areaList = new ArrayList<>();
    Area a1 = new Area(1, 10L, "河南", new BigDecimal(100), 1);
    Area a2 = new Area(2, 20L, "江西", new BigDecimal(200), 2);
    Area a3 = new Area(3, 30L, "北京", new BigDecimal(300), 3);
    Area a4 = new Area(4, 40L, "天津", new BigDecimal(400), 1);
    areaList.add(a4);
    areaList.add(a1);
    areaList.add(a2);
    areaList.add(a3);

    // 集合对象某一个字段抽取出来排成集合
    List<Integer> fieldList = areaList.stream().map(item -> item.getId()).collect(Collectors.toList());
    System.out.println("集合对象某一个字段抽取出来排成集合 = " + fieldList);

    // 集合对象某一个字段抽取出来排成字符串
    String listObjToStr= areaList.stream().map(item -> String.valueOf(item.getId())).collect(joining(","));
    System.out.println("集合对象某一个字段抽取出来排成字符串 = " +listObjToStr);
   
    // 集合对象某一个字段抽取出来排成数组
    String[] listObjToArray = areaList.stream().map(item -> String.valueOf(item.getId())).toArray(String[]::new);
    // Long
    Long[] longs = areaList.stream().map(item -> item.getUid()).toArray(Long[]::new);
    // Integer
    Integer[] integers = areaList.stream().map(item -> item.getId()).toArray(Integer[]::new);
    System.out.println("集合对象某一个字段抽取出来排成数组 = " + listObjToArray);

    // 集合中对象根据String数值去重
    List<Area> uniqueList2 = areaList.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(Comparator.comparing(Area::getName))), ArrayList::new));
    System.out.println("集合中对象去重 = " + uniqueList2);
    
    // 集合中对象根据String数值去重
    List<Area> uniqueList2 = areaList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(item -> item.getName()))), ArrayList::new));
    System.out.println("集合中对象去重 = " + uniqueList2 );
  
    // 将一个集合数据赋值带新的集合
    List<AreaVO> newList = areaList.stream().map(sg -> {
        AreaVO areaVO = BeanUtil.copyPropertes(AreaVO.class, sg);
        return areaVO;
    }).collect(Collectors.toList());
    System.out.println("将一个集合数据赋值带新的集合 = " + newList);

    //过滤排序出符合条件的数据
    Integer value = 10;
    List<Area> filterList = areaList.stream()
        .filter(item -> item.getUid().equals(Long.valueOf(value)))
        .filter(item -> item.getLevel() >= 2)
         .sorted(Comparator.comparing(Area::getId))//依id升序排序
        .sorted(Comparator.comparing(Area::getId).reversed())//依id降序排序
        .collect(Collectors.toList());
    System.out.println("过滤出符合条件的数据 = " + filterList);

    // 计算求和数量 方式1
    Integer integerTotalSum = areaList.stream().collect(summingInt(Area::getId));
    System.out.println("计算数量integerTotalSum = " + integerTotalSum);

    Double doubleTotalSum = areaList.stream().collect(summingDouble(Area::getId));
    System.out.println("计算数量doubleTotalSum = " + doubleTotalSum);

    Long longTotalSum = areaList.stream().collect(summingLong(Area::getId));
    System.out.println("计算数量longTotalSum = " + longTotalSum);


    // 计算求和数量 方式2

    Integer intTotalSum = areaList.stream().map(Area::getId).reduce(Integer::sum).get();
    System.out.println("计算求和数量asInteger = " + intTotalSum);

    Long asLong = areaList.stream().mapToLong(Area::getId).reduce(Long::sum).getAsLong();
    System.out.println("计算求和数量asLong = " + asLong);
    
    Double asDouble = areaList.stream().mapToDouble(Area::getId).reduce(Double::sum).getAsDouble();
    System.out.println("计算求和数量asDouble = " + asDouble); 

    // bigdecimal计算数量求和
    BigDecimal totalMoney = areaList.stream().map(Area::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
    System.out.println("bigdecimal计算数量求和 = " + totalMoney);

    // 求平均值
    Double avgCalories = areaList.stream().collect(averagingInt(Area::getId));
    System.out.println("求平均值 = " + avgCalories);

    // 集合中对象某个字段最大值对象
    Optional<Area> maxObj = areaList.stream().collect(Collectors.maxBy(Comparator.comparing(Area::getId)));
    System.out.println("集合中对象某个字段最大值对象 = " + maxObj);

    // 集合中对象某个字段最小值对象
    Optional<Area> minObj = areaList.stream().collect(Collectors.minBy(Comparator.comparing(Area::getId)));
    System.out.println("集合中对象某个字段最小值对象 = " + minObj);

    // 统计某个值全部参数
    IntSummaryStatistics summaryStatistics = areaList.stream().collect(summarizingInt(Area::getId));
    System.out.println("统计某个值全部参数 = " + summaryStatistics);

    // 集合对象是否符合某个条件标准
    boolean isAllAdult = areaList.stream().allMatch(item -> item.getId() > 2);
    System.out.println("集合对象是否符合某个条件标准 = " + isAllAdult);

    // (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2(后者数据)
    Map<Integer, Area> listToMap = areaList.stream().collect(Collectors.toMap(Area::getId, item -> item, (k1, k2) -> k1));
    Map<Integer, Area> listToLinkedHashMap = areaList.stream().collect(Collectors.toMap(Area::getId, Function.identity(), (k1, k2) -> k1, LinkedHashMap::new));
    System.out.println("根据ID,List转Map = " + listToMap);
    System.out.println("根据ID,List转Map = " + listToLinkedHashMap);

    //List 以level分组转化成map
    Map<Integer, List<Area>> mapByGroup = areaList.stream().collect(Collectors.groupingBy(Area::getLevel));
    System.out.println("List以level分组转化成map = " + mapByGroup);

    //List以level分组,求和id值
    Map<Integer, Integer> listGroupFiledSum = areaList.stream().collect(groupingBy(Area::getLevel, summingInt(Area::getId)));
    System.out.println("List以level分组,求和id值 = " + listGroupFiledSum);
    
    //单个字段,分组求和(datas)获取到sum,max,min,count
    Map<Integer, LongSummaryStatistics> enusersCollect = areaList.stream().collect(groupingBy(Area::getLevel, summarizingLong(Area::getUid)));
    System.out.println("enusersCollect = " + enusersCollect);
    
    //多个字段,分组求和(先按level分组,再按uid分组,求和id)
    Map<Integer, Map<Long, IntSummaryStatistics>> integerMapMap = areaList.stream().collect(groupingBy(Area::getLevel, groupingBy(Area::getUid, summarizingInt(Area::getId))));
    System.out.println("integerMapMap = " + integerMapMap);

    //List以level分组,求和money值
    Map<Integer, BigDecimal> groupFiledBigDecimalSum = areaList.stream().collect(Collectors.groupingBy(Area::getLevel, CollectorsUtil.summingBigDecimal(Area::getMoney)));
    System.out.println("groupFiledBigDecimalSum = " + groupFiledBigDecimalSum);

    // list以level分组,然后求每组level的最大值
    Map<Integer, Optional<Area>> listGroupMaxObj = areaList.stream().collect(groupingBy(Area::getLevel, maxBy(comparingInt(Area::getLevel))));
    System.out.println("list以level分组,然后求每组level的最大值 = " + listGroupMaxObj);

    // list以level分组,然后求每组level的最小值
    Map<Integer, Optional<Area>> listGroupMinObj = areaList.stream().collect(groupingBy(Area::getLevel, minBy(comparingInt(Area::getLevel))));

集合和集合

    List<String> listOne = Arrays.asList("1", "2", "3", "4", "5");
    List<String> listTwo = Arrays.asList("4", "5", "6", "7", "8");

    // 两个集合字符串交集
    List<String> intersection = listOne.stream().filter(item -> listTwo.contains(item)).collect(Collectors.toList());
    System.out.println("两个集合字符串交集 = " + intersection);

    // 两个集合字符串差集 (list1集合删除list1,list2共有的元素)
    List<String> reduce1 = listOne.stream().filter(item -> !listTwo.contains(item)).collect(Collectors.toList());
    System.out.println("listOne集合删除listOne,listTwo共有的元素后剩余元素 = " + reduce1);

    // 两个集合字符串差集 (list2集合删除list1,list2共有的元素)
    List<String> reduce2 = listTwo.stream().filter(item -> !listOne.contains(item)).collect(Collectors.toList());
    System.out.println("listTwo集合删除listOne,listTwo共有的元素后剩余元素 = " + reduce2);

    // 两个集合并集
    List<String> listAll = listOne.parallelStream().collect(Collectors.toList());
    List<String> listAll2 = listTwo.parallelStream().collect(Collectors.toList());
    listAll.addAll(listAll2);
    System.out.println("两个集合并集 = " + listAll);

    // 去重并集
    List<String> listAllDistinct = listAll.stream().distinct().collect(Collectors.toList());
    System.out.println("两个集合去重并集 = " + listAllDistinct);

    List<Area> areaListOne = new ArrayList<>();
    Area a1 = new Area(1, 10L, "河南", new BigDecimal(100), 1);
    Area a2 = new Area(2, 20L, "江西", new BigDecimal(200), 2);
    Area a3 = new Area(3, 30L, "北京", new BigDecimal(300), 3);
    Area a4 = new Area(4, 40L, "天津", new BigDecimal(400), 1);
    areaListOne.add(a4);
    areaListOne.add(a1);
    areaListOne.add(a2);
    areaListOne.add(a3);
    
    List<Area> areaListTwo = new ArrayList<>();
    Area a5 = new Area(5, 10L, "巴黎", new BigDecimal(100), 1);
    Area a6 = new Area(6, 60L, "伦敦", new BigDecimal(200), 2);
    Area a7 = new Area(7, 70L, "新西兰", new BigDecimal(300), 1);
    Area a8 = new Area(8, 80L, "悉尼", new BigDecimal(400), 2);
    areaListTwo.add(a8);
    areaListTwo.add(a5);
    areaListTwo.add(a6);
    areaListTwo.add(a7);
    
    // 两个对象获取交集
    List<Area> objIntersection = areaListOne.stream().filter(item -> areaListTwo.stream().map(e -> e.getUid()).collect(Collectors.toList()).contains(item.getUid())).collect(Collectors.toList());
    System.out.println("两个集合字符串交集 = " + objIntersection);
    
    // 两个集合字符串差集 (list1集合删除list1,list2不共有的元素)
    List<Area> differenceSet = areaListOne.stream().filter(item -> !areaListTwo.stream().map(e -> e.getUid()).collect(Collectors.toList()).contains(item.getUid())).collect(Collectors.toList());
    System.out.println("listOne集合删除listOne,listTwo共有的元素后剩余元素 = " + differenceSet);
    
    
    // 两个集合并集
    List<Area> objlistAll = areaListOne.parallelStream().collect(Collectors.toList());
    List<Area> objlist = areaListTwo.parallelStream().collect(Collectors.toList());
    objlistAll.addAll(objlist);
    System.out.println("两个集合并集 = " + objlistAll);
    
    // 去重
    List<Area> uniqueList = objlistAll.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(Area::getUid))), ArrayList::new));
    System.out.println("两个集合去重并集 = " + uniqueList);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值