Java8之新特性--Stream详解

1.Java8中的Stream可以做什么?

Java8中的Stream主要用来对容器/集合中的数据进行操作,它主要分为三个流程:起始操作,中间操作,终止操作

起始操作:指定一个数据源(一般为集合List,Set等)

中间操作:对数据源(集合)中的数据采用筛选,过滤,类型转换

注:中间操作不会造成对数据源中源数据的污染,即原集合中的数据结构以及数据不会因为Stream的中间操作而改变

终止操作:可以将中间操作后的数据进行分组汇总、统计,并可以针对操作后的数据生成新的容器集合

二、Stream常用操作演示(主要对工作中常用到的三种中间操作--filter, sort, map进行阐述)

1、Stream的中间操作---filter筛选

(1)筛选事例1

// filter 1
List<Account> uidEquals1 = bunchOfAccounts.stream()
        .filter(account -> account != null && "1".equals(account.getUid()))
        .collect(Collectors.toList());
 
uidEquals1.forEach(account -> System.out.println(account.getNickName()));

该事例是将Account集合中每个account不为NULL并且ID为1的account全部通过中间操作-filter筛选出来,并使用collect进行组合为一个新的集合。

(2)筛选事例2

// filter 2
List<Account> uidEquals2List = bunchOfAccounts.stream()
        .filter(account -> {
            if (account != null) {
                if ("炸鸡小子3".equals(account.getNickName())) {
                    return true;
                }
            }
            return false;
        })
        .collect(Collectors.toList());
 
uidEquals2List.forEach(account -> System.out.println(account.getNickName()));

该事例主要想告诉大家,如果filter方法体中包含多条语句并结合{}的使用筛选方式,filter方法参数为Predicate函数式接口,它的返回值约定必须为一个boolean类型的值,如何不加{},默认返回方法体中指定的条件表达式的结果。如果遇到业务较复杂的代码,就要使用到return关键字手动返回结果。


2、Stream的中间操作---sort排序

(1)排序事例1--按指定字段升序

// sort 1---默认的升序排序
List<Account> uidSorted1List = bunchOfAccounts.stream()
        .sorted(Comparator.comparing(Account::getUid))
        .collect(Collectors.toList());
 
uidSorted1List.forEach(account -> System.out.println(account.getUid()));

该事例将id进行默认的升序排序,使用Java8的Stream提供的排序接口,可以不用专门针对对应的实体类实现Comparable接口,并重写compareTo方法。细心的人可能会发现代码中有Account : : getUid,这样一句代码,它就是Java8中的(方法引用),主要配合Lambda以及Stream使用。该排序不仅支持升序,也支持降序,代码如下:

(2)排序事例2--按指定字段降序

// sort 2---降序排序
List<Account> uidSorted2List = bunchOfAccounts.stream()
        .sorted(Comparator.comparing(Account::getUid).reversed())
        .collect(Collectors.toList());
uidSorted2List.forEach(account -> System.out.println(account.getUid()));


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值