jdk8的流式编程极大的简化了我们的代码,在某些时候还能提高代码的性能。它能做的事情有很多,例如分类、排序、list转化set或map等。
1.filter过滤
userIdListFinal = userIdListA.stream().filter(userIdListB::contains).collect(Collectors.toList());
这里的示例是用来取userIdListA和userIdListB的交集的
2.Comparator排序
sopTodoListVOS = sopTodoListVOS.stream().sorted(Comparator.comparing(SopTodoListVO::getApproveTime)).collect(Collectors.toList());
这里和Java中的Comparator排序是一样的,但是这种方式相对整洁
有时候会有空值的情况,需要加一个Comparator.nullsLast
recommendCompanyVOS=recommendCompanyVOS.stream().sorted(Comparator.comparing(RecommendCompanyVO::getBoothId,
Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
3.分组
Map<String, List<SopTodoListVO>> collect = list.stream().collect(Collectors.groupingBy(SopTodoListVO::getApprovalId));
Map<String, List<CustomsClearanceOutputDto>> map = list.stream().collect(Collectors.groupingBy(data -> format("{0}#{1}", data.getModel(), data.getType())));
// 按多字段分组
public static String format(String value, Object... paras) {
return MessageFormat.format(value, paras);
}
这里根据ApprovalId进行分组的
4.转为map
Map<Long, String>crtTypeMap = contractTypeDao.selectAll().stream().collect(Collectors.toMap(ContractType::getId, ContractType::getName));
这里是利用Collectors.toMap将其转换的,
Set collect = sopTodoLists.stream().collect(Collectors.toSet());
5.转为set
Set<Long> userIdListB userIdListB = userListByGroupId.stream().map(BaseUserInfoVO::getId).collect(Collectors.toSet());
6.转为list
List<Long> cartIds = list.stream().map(CartItemDO::getId).collect(Collectors.toList());