Java 8 Stream API了解下

1 篇文章 0 订阅

Stream对象的创建

Stream对象分为两种,一种串行的流对象,一种并行的流对象。

// permissionList指所有权限列表
// 为集合创建串行流对象
Stream<UmsPermission> stream = permissionList.stream();
// 为集合创建并行流对象
tream<UmsPermission> parallelStream = permissionList.parallelStream();Copy to clipboardErrorCopied

filter

对Stream中的元素进行过滤操作,当设置条件返回true时返回相应元素。

// 获取权限类型为目录的权限
List<UmsPermission> dirList = permissionList.stream()
    .filter(permission -> permission.getType() == 0)
    .collect(Collectors.toList());Copy to clipboardErrorCopied

map

对Stream中的元素进行转换处理后获取。比如可以将UmsPermission对象转换成Long对象。 我们经常会有这样的需求:需要把某些对象的id提取出来,然后根据这些id去查询其他对象,这时可以使用此方法。

// 获取所有权限的id组成的集合
List<Long> idList = permissionList.stream()
    .map(permission -> permission.getId())
    .collect(Collectors.toList());Copy to clipboardErrorCopied

limit

从Stream中获取指定数量的元素。

// 获取前5个权限对象组成的集合
List<UmsPermission> firstFiveList = permissionList.stream()
    .limit(5)
    .collect(Collectors.toList());Copy to clipboardErrorCopied

count

仅获取Stream中元素的个数。

// count操作:获取所有目录权限的个数
long dirPermissionCount = permissionList.stream()
    .filter(permission -> permission.getType() == 0)
    .count();Copy to clipboardErrorCopied

sorted

对Stream中元素按指定规则进行排序。

// 将所有权限按先目录后菜单再按钮的顺序排序
List<UmsPermission> sortedList = permissionList.stream()
    .sorted((permission1,permission2)->{return permission1.getType().compareTo(permission2.getType());})
    .collect(Collectors.toList());Copy to clipboardErrorCopied

skip

跳过指定个数的Stream中元素,获取后面的元素。

// 跳过前5个元素,返回后面的
List<UmsPermission> skipList = permissionList.stream()
    .skip(5)
    .collect(Collectors.toList());Copy to clipboardErrorCopied

用collect方法将List转成map

有时候我们需要反复对List中的对象根据id进行查询,我们可以先把该List转换为以id为key的map结构,然后再通过map.get(id)来获取对象,这样比较方便。

// 将权限列表以id为key,以权限对象为值转换成map
Map<Long, UmsPermission> permissionMap = permissionList.stream()
    .collect(Collectors.toMap(permission -> permission.getId(), permission -> permission));

null值排到最后

     List<MaintenanceVO> maintenances = new ArrayList<>(map.values());
        maintenances.sort(Comparator.nullsLast(
                Comparator.comparing(
                        MaintenanceVO::getMaintenanceDate
                        , Comparator.nullsLast(Comparable::compareTo))
        ));

 

list转LinkedHashMap

        Map<Integer, List<GameRecord>> map = playerList.stream()
                .collect(Collectors.groupingBy(GameRecord::getPokerLevel, LinkedHashMap::new, Collectors.toList()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁漂打工仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值