Java Stream 性能对比:分组 vs 循环遍历
Java Stream 性能对比:分组 vs 循环遍历
本文对比了两种使用 Java Stream 处理推送数据的方法,并分析了两种方法的优劣:
方法一:循环遍历
List<PushVO> pushVOList = new ArrayList<>();
List<String> modules = pushList.stream()
.map(Push::getModule)
.distinct()
.collect(Collectors.toList());
modules.forEach(i -> {
List<PushDTO> pushDTOList = PushConverter.INSTANCE.toPushDTO(pushList.stream().filter(j -> j.getModule().equals(i)).collect(Collectors.toList()));
pushVOList.add(
PushVO.builder()
.module(i)
.messageList(pushDTOList)
.build()
);
});
方法二:分组
List<PushVO> pushVOList = pushList.stream()
.collect(Collectors.groupingBy(Push::getModule))
.entrySet()
.stream()
.map(entry -> PushVO.builder()
.module(entry.getKey())
.messageList(PushConverter.INSTANCE.toPushDTO(entry.getValue()))
.build())
.collect(Collectors.toList());
性能分析
第二种方式的性能更好。原因是第一种方式需要进行两次流操作,一次是获取所有的模块列表,第二次是根据每个模块获取对应的推送列表。而第二种方式只需要一次流操作,利用 Collectors.groupingBy 方法进行分组,然后直接转换为 PushVO 对象。因此,第二种方式在性能上更加高效。
结论
当需要对数据进行分组操作时,使用 Collectors.groupingBy 方法能够提高代码效率。相比循环遍历,分组方法减少了流操作次数,从而提升了代码性能。
原文地址: https://www.cveoy.top/t/topic/mVck 著作权归作者所有。请勿转载和采集!