主页 > 互联网  > 

后端JavaStream数据流的使用=>代替for循环

后端JavaStream数据流的使用=>代替for循环

API讲解 

  

对比 

示例代码对比 for循环遍历  package cn.ryanfan.platformback.service.impl; import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; import cn.ryanfan.platformback.mapper.AlgorithmCategoryMapper; import cn.ryanfan.platformback.mapper.AlgorithmMapper; import cn.ryanfan.platformback.service.IAlgorithmService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author 刘一帆 * @since 2025-02-20 */ @Service @RequiredArgsConstructor public class AlgorithmServiceImpl extends ServiceImpl<AlgorithmMapper, Algorithm> implements IAlgorithmService { private final AlgorithmMapper algorithmMapper; private final AlgorithmCategoryMapper algorithmCategoryMapper; @Override public List<AlgorithmInfoDTO> selectAllAlgorithmInfo() { // 最终数据 List<AlgorithmInfoDTO> result = new ArrayList<>(); // 查询algorithm表数据 List<Algorithm> algorithmList = algorithmMapper.selectList(null); // 查询category表数据 存于Map for(Algorithm algorithm : algorithmList){ AlgorithmInfoDTO algorithmInfoDTO = new AlgorithmInfoDTO(); algorithmInfoDTO.setId(algorithm.getId()); algorithmInfoDTO.setName(algorithm.getName()); algorithmInfoDTO.setStatus(algorithm.getStatus()); //设置DTO的category_Name 旧方法:在for循环中进行查询(每一次for都在查询) 新方法:将category表新查出=>存于Map=>每次遍历这个Map LambdaQueryWrapper<AlgorithmCategory> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(AlgorithmCategory::getId,algorithm.getCategoryId()); algorithmInfoDTO.setCategoryName(algorithmCategoryMapper.selectOne(lambdaQueryWrapper).getName()); result.add(algorithmInfoDTO); } return result; } } stream流式处理 package cn.ryanfan.platformback.service.impl; import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; import cn.ryanfan.platformback.mapper.AlgorithmCategoryMapper; import cn.ryanfan.platformback.mapper.AlgorithmMapper; import cn.ryanfan.platformback.service.IAlgorithmService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> * 服务实现类 * </p> * * @author 刘一帆 * @since 2025-02-20 */ @Service @RequiredArgsConstructor public class AlgorithmServiceImpl extends ServiceImpl<AlgorithmMapper, Algorithm> implements IAlgorithmService { private final AlgorithmMapper algorithmMapper; private final AlgorithmCategoryMapper algorithmCategoryMapper; @Override public List<AlgorithmInfoDTO> selectAllAlgorithmInfo() { // 查询algorithm表数据 List<Algorithm> algorithmList = algorithmMapper.selectList(null); // 查询category表数据 存于Map 查询所有的分类数据,避免逐个查询 List<AlgorithmCategory> categoryList = algorithmCategoryMapper.selectList(null); Map<Integer,String> categoryMap = categoryList.stream().collect(Collectors.toMap(AlgorithmCategory::getId,AlgorithmCategory::getName)); // 最终数据 List<AlgorithmInfoDTO> result = algorithmList.stream() .map(algorithm -> { AlgorithmInfoDTO algorithmInfoDTO = new AlgorithmInfoDTO(); algorithmInfoDTO.setId(algorithm.getId()); algorithmInfoDTO.setName(algorithm.getName()); algorithmInfoDTO.setStatus(algorithm.getStatus()); // 通过分类 id 获取分类名称 String categoryName = categoryMap.get(algorithm.getCategoryId()); algorithmInfoDTO.setCategoryName(categoryName != null ? categoryName : "未知分类"); return algorithmInfoDTO; }) .collect(Collectors.toList()); return result; } }

标签:

后端JavaStream数据流的使用=>代替for循环由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“后端JavaStream数据流的使用=>代替for循环