java 8 stream

过滤求和

 BigDecimal totalAmount =carts.stream()
                .filter(s -> (s != null && 
                 ActiveStatus.ACTIVE.getName().equals(s.getActiveStatus().getName())))
                .map(CartExtVo::getTotalAmount)
                .reduce(BigDecimal.ZERO, BigDecimal::add);

转换成map

Map<Long, ItemExtVo> map = itemExtVos.stream().collect(Collectors.toMap(ItemExtVo::getId, extVo -> extVo));

filter

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

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

map

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

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

limit

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

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

count

仅获取Stream中元素的个数。

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

sorted

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

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

skip

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

// 跳过前5个元素,返回后面的
List<UmsPermission> skipList = permissionList.stream()
    .skip(5)
    .collect(Collectors.toList());
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。