stream常用方法及案例

1.查找集合中的第一个对象
 
 Optional<Object> first= ObjectList.stream() .filter(a -> "hanmeimei".equals(a.getUserName())) .findFirst();  
 
2.返回符合查询条件的集合
 
//所有名字叫hanmeimei的集合
 
 List<Object> firstObject= ObjectList.stream() .filter(a -> "hanmeimei".equals(a.getUserName())) .collect(Collectors.toList());
 
//所有名字为空的集合
 
List<Object> firstObject= ObjectList.stream() .filter(a -> StringUtils.isEmpty(a.getUserName())) .collect(Collectors.toList());

3. filter 过滤
    private List<Integer> integers = Lists.list(30, 40, 10, 20);
        Set<Integer> collect = integers.stream()
            .filter(i -> i > 20).collect(Collectors.toSet());
        assertEquals(Sets.newTreeSet(30, 40), collect);
    
4. map 对每个元素执行操作,不会改变原本数量
    private List<Integer> integers = Lists.list(30, 40, 10, 20);
      List<String> collect = integers.stream().map(i -> i + "哈哈").collect(Collectors.toList());
        assertEquals(Lists.list("30哈哈", "40哈哈", "10哈哈", "20哈哈"), collect);

5. distinct 去重
    List<Integer> integers = Lists.list(30, 40, 10, 20, 20, 10, 50, 20);    
    List<Integer> collect = integers.stream().distinct().collect(Collectors.toList());    
    System.out.println(collect);//[30, 40, 10, 20, 50]

6.sorted 排序
    collect = integers.stream().sorted().collect(Collectors.toList());
        System.out.println(collect);//  [10, 10, 20, 20, 20, 30, 40, 50]
        collect = integers.stream().sorted((x, y) -> {//这里认为40 不吉利 自定义排到最后
          if (y == 40) {
            return -1;  //  注意 排序比较时 结果 1排在前,-1排在后
          }else if (x==40){
            return 1;
          }
          return x.compareTo(y);
        }).collect(Collectors.toList());
        System.out.println(collect);// [10, 10, 20, 20, 20, 30, 50, 40]
    
7. limit 限定流元素数量
     List<Integer> integers = Lists.list(30, 40, 10, 20, 20, 10, 50, 20);    
     List<Integer> collect = integers.stream().limit(3).collect(Collectors.toList());    
     System.out.println(collect); // [30, 40, 10]
 
 8. skip 跳过多少个元素
     List<Integer> q = Lists.list(30, 40, 10, 20, 20, 10, 50, 20);    
     List<Integer> collect5 = q.stream().skip(2).collect(Collectors.toList());    
     System.out.println(collect5); // [10, 20, 20, 10, 50, 20]
 
 9. min 最小 count总数
    List<Integer> integers = Lists.list(30, 40, 10, 20, 20, 10, 50, 20);  
    Integer integer1 = integers.stream().min(Integer::compareTo).orElse(-1);    
    System.out.println(integer1); //10    long count = integers.stream().count();    
    System.out.println(count);//8

10.findFirst 第一个 findAny 随便一个
    List<Integer> integers = Lists.list(30, 40, 10, 20, 20, 10, 50, 20);
     Integer integer2 = integers.stream().findFirst().orElse(-1);
        Integer integer3 = integers.stream().findAny().orElse(-1);

11.collect 收集
    List<Integer> integers = Lists.list(30, 40, 10, 20, 20, 10, 50, 20);  
        ArrayList<Object> collect1 = integers.stream()        
            .collect(ArrayList::new, ArrayList::add, ArrayList::add);    
        // 在combiner使用时,你的Stream是平行的,因为在这种情况下,    
        // 多个线程收集的元素Stream到最终输出的子列表ArrayList,    
        // 并且这些子列表必须被组合以产生最终的ArrayList。     
        System.out.println(collect1);// [30, 40, 10, 20, 20, 10, 50, 20]

12.使用collect将stream转化为list
    List<String> result1 = lines.stream()  // convert list to stream        
        .filter(line -> !"mkyong".equals(line)) // filter the line which equals to "mkyong"        
        .collect(Collectors.toList());  // collect the output and convert streams to a list     
        result1.forEach(System.out::println); // o

13.两个集合中的差集
//计算两个list中的差集
List<String> reduce1 = allList.stream()
    .filter(item -> !wList.contains(item)).collect(Collectors.toList());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值