You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java Stream API将列表数据转换为<语言编码:拼接字符串>映射

正确的Java Stream API实现方案

首先明确依赖的实体类结构(基于需求推导,若你的类结构有差异可对应调整):

class Name {
    private String langCode;
    private String longName;

    // 标准getter方法
    public String getLangCode() { return langCode; }
    public String getLongName() { return longName; }
}

class Level {
    private List<Name> names;

    public List<Name> getNames() { return names; }
}

class Subgroup {
    private Name name;
    private Level level;

    public Name getName() { return name; }
    public Level getLevel() { return level; }
}

原Java 6嵌套循环逻辑示例

List<Subgroup> subgroups = ...;
Map<String, String> langToLongNameMap = new HashMap<>();

for (Subgroup subgroup : subgroups) {
    Name subgroupName = subgroup.getName();
    String langCode = subgroupName.getLangCode();
    String subgroupLongName = subgroupName.getLongName();

    for (Name levelName : subgroup.getLevel().getNames()) {
        if (langCode.equals(levelName.getLangCode())) {
            String combined = subgroupLongName + " - " + levelName.getLongName();
            langToLongNameMap.put(langCode, combined);
        }
    }
}

正确的Stream API实现

List<Subgroup> subgroups = ...;

Map<String, String> langToLongNameMap = subgroups.stream()
    // 将每个Subgroup转换为(语言编码,拼接名称)的键值对,过滤Level中无对应语言的情况
    .flatMap(subgroup -> {
        Name subgroupName = subgroup.getName();
        String targetLang = subgroupName.getLangCode();
        String subgroupLongName = subgroupName.getLongName();

        return subgroup.getLevel().getNames().stream()
            .filter(levelName -> targetLang.equals(levelName.getLangCode()))
            .map(levelName -> new AbstractMap.SimpleEntry<>(targetLang, subgroupLongName + " - " + levelName.getLongName()));
    })
    // 收集为Map,处理重复语言编码的情况
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        // 合并策略:若同一语言有多条结果,这里用新值覆盖旧值;如需拼接可改为 existing + ", " + replacement
        (existing, newVal) -> newVal
    ));

关键逻辑说明

  1. flatMap:将单个Subgroup展开为0或1条键值对(仅保留Level中与Subgroup同语言的Name条目),避免嵌套循环的层级结构。
  2. Collectors.toMap:
    • 前两个参数分别指定键(语言编码)和值(拼接后的长名称)。
    • 第三个参数是合并函数,处理同一语言编码对应多个值的场景,可根据业务需求调整(如拼接所有结果、保留第一个值等)。

内容的提问来源于stack exchange,提问作者Yash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:01:18