java8案例对list[过滤、分组,转换,查找等]清洗逻辑

一 java8案例代码

1.1 代码

复制代码
public class TestA {
    public static void main(String[] args) {
        List<AssistantResponse> assistantResponseList = new ArrayList<>();
        AssistantResponse assistantResponse1 = new AssistantResponse();
        assistantResponse1.setRepositoryId("123");
        AssistantResponse assistantResponse2 = new AssistantResponse();
        assistantResponse2.setRepositoryId("145,456,789");
        assistantResponseList.add(assistantResponse1);
        assistantResponseList.add(assistantResponse2);
        Map<Integer, RepositoryConfigPo> resultMap = new HashMap<>();
        RepositoryConfigPo repositoryConfigPo1 = new RepositoryConfigPo();
        repositoryConfigPo1.setRepositoryName("中");
        resultMap.put(123, repositoryConfigPo1);
        RepositoryConfigPo repositoryConfigPo2 = new RepositoryConfigPo();
        repositoryConfigPo2.setRepositoryName("国");
        resultMap.put(456, repositoryConfigPo2);
        RepositoryConfigPo repositoryConfigPo3 = new RepositoryConfigPo();
        repositoryConfigPo3.setRepositoryName("人");
        resultMap.put(789, repositoryConfigPo3);
        RepositoryConfigPo repositoryConfigPo4 = new RepositoryConfigPo();
        repositoryConfigPo4.setRepositoryName("万");
        resultMap.put(145, repositoryConfigPo4);
        for (AssistantResponse assistantResponse : assistantResponseList) {
            String repository = assistantResponse.getRepositoryId();
            if (org.springframework.util.StringUtils.hasText(repository)) {
                List<String> cnNames = new ArrayList<>();
                // 使用三元运算符决定是分割还是作为单个元素
                String[] idArray = repository.contains(",") ?
                        repository.split(",") :
                        new String[]{repository};
                // 开始 Stream 流式处理
                Arrays.stream(idArray) // 1. 解析: 按逗号分割字符串
                        .map(String::trim)               // 2. 清洗: 去除每个元素的首尾空格
                        .filter(id -> !id.isEmpty())     // 2. 清洗: 过滤掉空字符串
                        .map(Integer::parseInt)          // 3. 转换: 将字符串转换为 Integer
                        .map(resultMap::get)             // 4. 查找: 从 resultMap 中获取对应的对象
                        .filter(Objects::nonNull)        // 5. 过滤: 过滤掉 null 值
                        .map(RepositoryConfigPo::getRepositoryName) // 6. 提取: 获取 repositoryName
                        .forEach(cnNames::add);          // 7. 收集: 添加到 cnNames 列表中
                // 将 cnNames 列表用逗号连接成字符串,并设置回对象
                assistantResponse.setKnowledgeRepositoryName(String.join(",", cnNames));
            }
        }
        assistantResponseList.stream().forEach(x -> {
            System.out.println("x:" + x.getKnowledgeRepositoryName());
        });
    }

1.2 执行结果

相关推荐
雪碧聊技术1 分钟前
KMP算法详解
数据结构
chjif9 分钟前
一张照片和一段声音如何生成口播视频:MiniMax H3 音画同步实测
java·前端·javascript
何以解忧,唯有..19 分钟前
LangChain 中 Pydantic 格式输出:结构化输出的完整指南
java·开发语言·langchain
旧梦952740 分钟前
Java 捕获多个异常:从基础语法到最佳实践
java·开发语言
2601_9621896044 分钟前
【SpringBoot】使用IDEA创建SpringBoot项目
java·spring boot·intellij-idea
步行cgn1 小时前
Spring Boot 启动报错:MissingServletWebServerFactoryBean 的排查与解决
java·spring boot·后端
XLYcmy1 小时前
HTML/CSS/JS 基础与 Vue 技术栈深度解析
java·前端·css·html·vue3·vue2·api
~木雨1 小时前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
新知图书1 小时前
12.3 智能体中Skill的约束与自进化实战
java·前端·数据库
en.en..1 小时前
C语言 static函数与头文件封装规范
java·c语言·前端