stream 流判断两个对象集合中元素是否相等并把一个数组中的元素添加到另一个集合中
个人经验: 如果仅判断是否相等的话可以直接用双层for循环判断,但这种写法虽然可以实现功能,但是他的缺点就是,如果在数据量很大的情况下,性能不是那么好,数据处理不合理。不推荐这种写法。
还有第二种方法:就是用stream流处理,效率要稍微好一点。既可以判断元素是否相等,也可以处理两个对象集合中元素的数据。
废话不多说,直接看实例:
//集合一:
List<ProjectFinishedSubjectStatisticsDTO> projectDTOS =new ArrayList<>();
//集合二:
List<ProjectFinishedSubjectStatisticsDTO> projectDTOList =
projectFinishedMapper.querySubjectStatistics(projectFinishedQueryDTO,theme);
//stream流判断
for (ProjectFinishedSubjectStatisticsDTO projectDTO : projectDTOS) {
//如果集合一种的元素和集合二中的元素相等,会把集合二中元素相等的对象取出,就可以做相应的数据处理了
List<ProjectFinishedSubjectStatisticsDTO> collect = projectFinishedSubjectStatisticsDTOList.stream()
.filter(tmp -> projectDTO.getTheme().equals(tmp.getTheme())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(collect)) {
projectDTO.setTotalQuantity(collect.get(0).getTotalQuantity());
} else {
projectDTO.setTotalQuantity(BigDecimal.valueOf(0));
}
}
更新:
两个集合合并另外一种写法:stream流自带的方法.concat()
例:
stream流根据某个对象排序
projectFinishedSubjectStatisticsDTOList.stream().sorted(Comparator.comparing(ProjectFinishedSubjectStatisticsDTO::getTotalQuantity,Comparator.nullsLast(BigDecimal::compareTo)));