java 8 Stream(流式的使用简单记录)

Stream是java8新加入的API,以前项目中都没有用到,最近新接触的项目用了很多。

Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性.

具体的描述我就不打字了,嫌麻烦,有兴趣的可以去找度娘,只是上代码试例

之前代码中,对各种集合数据的处理,包括循环,过滤等都是常规的for循环或者迭代器迭代等,自我感觉哈,以前的这种代码可读性高一点,基本一眼就会看出原编程人员想要干什么,但是代码非常多,不美观,显得不高大上。。。手动笑脸。。。。

    private List<Student> doFilter(List<Student> list ,String keyWord){
        return list.stream().filter(x->{
            Boolean nameMatch=(null!=x.getName()?x.getName().contains(keyWord):Boolean.FALSE);
            Boolean idMatch=(null!=x.getId()?x.getId().contains(keyWord):Boolean.FALSE);
            Boolean sexMatch=(null!=x.getSex()?x.getSex().contains(keyWord):Boolean.FALSE);
            return (nameMatch||idMatch||sexMatch);
        }).collect(toList());
    }

 上面是Steam的filter操作,十分好用,可以过滤出你想要的数据;

这里提一点,Steam分为并行流和串行流,上面的例子是串行流,适合单线程,如果数据量大的情况下会出现问题,这时候保证线程安全情况下,用并行流更好。

  • default Stream stream() : 返回串行流
  • default Stream parallelStream() : 返回并行流
    private List<Student> doFilter(List<Student> list ,String keyWord){
        CopyOnWriteArrayList<Student> newList=new CopyOnWriteArrayList<>(list);
        return newList.parallelStream().filter(x->{
            Boolean nameMatch=(null!=x.getName()?x.getName().contains(keyWord):Boolean.FALSE);
            Boolean idMatch=(null!=x.getId()?x.getId().contains(keyWord):Boolean.FALSE);
            Boolean sexMatch=(null!=x.getSex()?x.getSex().contains(keyWord):Boolean.FALSE);
            return (nameMatch||idMatch||sexMatch);
        }).collect(toList());

 这里用线程安全的集合。stream()和parallelStream()方法它们在功能的使用上是没差别的。差别就是单线程和多线程的执行。

反正,现在对于集合类的处理,用stream和Lambda表达式用的很爽,以前没尝试过,熟悉后用上了就停不下来了,像limit,peek,sorted,forEach等操作经常用到,加上Lambda表达式就很简洁。

这里再提一下,如果用了stream的遍历的话,同一个流是只能遍历一次的,不能像下面的操作

        Stream<Student> studentStream=list.stream();
        studentStream.forEach(x->{doSomething});
        studentStream.forEach(x->{doSomething});

这里面简单记录下,想学更多Stream的api可以查阅官方文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值