Java stream的常见用法

不讲原理,只说用法。

1,集合遍历

public class StreamTest {

    public static void main(String[] args) {
        //1 遍历
        
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        //使用lambda表达式输出list中的每个值
        list.forEach(c->{
            System.out.println(c);
        });
        //调用方法
        list.forEach(StreamTest::showList);
    }
    
    public static void showList(String value) {
        System.out.println(value);
    }
}

2,筛选集合

 List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).collect(Collectors.toList());

4,筛选并去重

List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).distinct().collect(Collectors.toList());

 

5,截断流  取出结果的前n个元素

List<String> list = new ArrayList<>();
       list.add("aaa");
       list.add("aaa");
       list.add("absc");
       list.add("bbb");
        
      List<String> selectResult = list.stream().filter(value->{
          return value.startsWith("a");
       }).limit(3).collect(Collectors.toList());

6,跳过元素,它和limit是互补的

 List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().filter(value->{
           return value.startsWith("a"); 
        }).skip(3).collect(Collectors.toList());

 

7,映射,对集合的每个元素操作,比如获取背包中所有物品的数量

List<Long> countList = role.getBag().getBagMap().values().stream().map(BagItem::getCount).collect(Collectors.toList());

 

8,集合流操作 ,例如 找到玩家背包中道具数据大于5的前3个道具id

Role role = new Role();
        List<String> result = role.getBag().getBagMap().values().
                stream().filter(item -> item.getCount() > 5).map(BagItem::getItemId).
                limit(3).collect(Collectors.toList());

其中,filter是过滤,map是遍历所有项,并返回一个值,limit是取三个结果,collect是收集并返回。只有在collect时才执行计算代码。

9,流的扁平化  flatmap

 它可以把几个相同类型的流合并成一个新的流。比如,获取List<String>集合中,各个字符串的字母集合,并去重。

List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        
       List<String> selectResult = list.stream().map(v->v.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());

输出结果

[a, b, s, c]

 

10,匹配判断

List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("absc");
        list.add("bbb");
        //是否所有的项都是以a开头
        boolean result = list.stream().allMatch(c->{
           return c.startsWith("a"); 
        });
        System.out.println(result);
        //是否有任何一项是否以a开头
        result = list.stream().anyMatch(c->{
           return c.startsWith("a"); 
        });
        //是否都不以a开头
        result = list.stream().noneMatch(c->{
           return c.startsWith("a"); 
        });

这就是对应Java中的&& ,||

 

11,list转map

//转map
        List<Role> roles = new ArrayList<>();
        Map<String, Role> map = roles.stream().collect(Collectors.toMap(Role::getRid, role-> role));
        

 


欢迎加群交流,QQ群:66728073,197321069,398808948 

转载于:https://my.oschina.net/youxijishu/blog/2993482

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值