1.Steam流 求取最大、最小、求和
List<ElectricTotalHourReport> curve = electricTotalHourReportMapper.curve(paramterSo);
BigDecimal max = curve.stream().map(ElectricTotalHourReport::getRecord).max(BigDecimal::compareTo).get();
BigDecimal min = curve.stream().map(ElectricTotalHourReport::getRecord).min(BigDecimal::compareTo).get();
BigDecimal energyCategorySum = energyCategory.stream()
.map(ElectricDailyReport::getRecord)
.reduce(BigDecimal.ZERO, BigDecimal::add);
2.Steam流 递归组建菜单树
// 组建常规菜单树
public List<SysMenu> sysMenuTree(List<SysMenu> sysMenuList) {
// 获取一级菜单
List<SysMenu> levelMenus_1 = sysMenuList.stream()
.filter(sysMenu -> sysMenu.getParentId() == 0)
.map((sysMenu) -> {
sysMenu.setChildren((getChildrens(sysMenu, sysMenuList)));
return sysMenu;
})
.collect(Collectors.toList());
return levelMenus_1;
}
// 传入root节点,找到all子节点
private List<SysMenu> getChildrens(SysMenu root, List<SysMenu> all) {
List<SysMenu> children = all.stream()
.filter(SysMenu -> {
return root.getMenuId().equals(SysMenu.getParentId());
}).map(SysMenu -> {
//递归查找子菜单
SysMenu.setChildren(getChildrens(SysMenu, all));
return SysMenu;
}).collect(Collectors.toList());
return children;
}
3.Steam流 转map
Map<String, EnergyBuild> buildMap = SpringUtils.getBean(EnergyBuildMapper.class)
.selectEnergyBuildList(new EnergyBuild())
.stream().collect(Collectors.toMap(o->o.getId().toString(), o -> o));
4.Steam流转set
Set<Long> dbSet = relationUserProjectMapper.selectRelationUserProjectList(new RelationUserProject(userId))
.stream().map(RelationUserProject::getProjectId).collect(Collectors.toSet());
5.Steam流排序
userArrayList.sort(Comparator.comparingInt(User::getAge));
6.Steam流Match
- anyMatch表示,判断的条件里,任意一个元素成功,返回true
- allMatch表示,判断条件里的元素,所有的都是,返回true
- noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true
boolean b = stream.allMatch(userEntity -> "mayikt".equals(userEntity.getUserName()));
7.Steam流Filter
stream.filter(userEntity -> "mayikt".equals(userEntity.getUserName()) && userEntity.getAge() > 18);
8.Steam流Skip、Limit
stream.skip(2).limit(3)
9.并行流,计算求和
Instant start = Instant.now();
LongStream longStream = LongStream.rangeClosed(0, 50000000000L);
// 使用并行流 计算 五百亿求和耗费的时间为: 7324 7850 7
OptionalLong result = longStream.parallel().reduce((left, right) -> left + right);
//使用多线程 处理 大的任务拆分成n多小的任务 在计算 在将结果合并 fork join框架
System.out.println(result.getAsLong());
Instant end = Instant.now();
System.out.println("五百亿求和耗费的时间为: " + Duration.between(start, end).toMillis());
10.Optional。
解决空指针问题,优化if,类中类字段不能为空,不便于理解,具体查看API。
public static String getOrderName() {
// 优化前写法:
OrderEntity order = new OrderEntity("123456", "MAyikt");
// if (order != null) {
// String orderName = order.getOrderName();
// if (orderName != null) {
// return orderName.toLowerCase();
// }
// }
return Optional.ofNullable(order).map(orderEntity -> orderEntity.getOrderName()).map(orderName ->
orderName.toLowerCase()).orElse(null);
}
11.删除List中的元素
list.removeIf(tzLyGroupRel -> existTzLyGroupRelMap.containsKey(tzLyGroupRel.getLyUserId()));