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 执行结果

相关推荐
镜花水月linyi1 分钟前
JDK 8 → 17 → 21 → 25:一次性讲清四代版本的关键跃迁
java·后端
0xDevNull14 分钟前
JDK 25 新特性概览与实战教程
java·开发语言·后端
Yiyi_Coding19 分钟前
BUG列表:如何定位线上 OOM ?
java·linux·bug
gelald19 分钟前
Spring - 循环依赖
java·后端·spring
凤山老林22 分钟前
Java 开发者零成本构建 RAG 知识库:Spring AI Alibaba + Ollama 搭建本地 RAG 知识库
java·人工智能·知识库·rag·spring ai
笨笨饿23 分钟前
34_数据结构_栈
c语言·开发语言·数据结构·人工智能·嵌入式硬件·算法
爱码驱动28 分钟前
文件操作和IO
java·开发语言·io·文件操作
坊钰30 分钟前
Java 反射机制
java·开发语言
明灯伴古佛31 分钟前
面试:为什么synchronized是一个悲观锁
java·面试·职场和发展
im_AMBER35 分钟前
Leetcode 152 被围绕的区域 | 岛屿数量
数据结构·算法·leetcode·深度优先·广度优先·图搜索算法