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

如何实现按单词首字符映射至对应单词列表的Map?

实现按单词首字符分组的Map方案

嘿,这个需求其实挺常见的,我给你两种实用的实现方式,适配不同的Java版本,你可以按需选择:

方法一:传统循环迭代(Java 8及之前版本适用)

这种方式逻辑直观,适合所有Java版本。核心思路就是遍历每个单词,提取首字符作为键,然后维护对应的单词列表:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class WordGrouping {
    public static void main(String[] args) {
        // 给定的单词列表
        List<String> words = Arrays.asList("albert", "ben", "alice", "cecilia");
        // 初始化你定义的Map
        Map<String, List<String>> bigMap = new HashMap<>();

        for (String word : words) {
            // 提取单词的首字符并转为字符串(因为Map的键是String类型)
            String firstChar = String.valueOf(word.charAt(0));
            
            // 检查Map中是否已存在该首字符对应的列表,不存在则新建一个
            if (!bigMap.containsKey(firstChar)) {
                bigMap.put(firstChar, new ArrayList<>());
            }
            
            // 将当前单词添加到对应的列表中
            bigMap.get(firstChar).add(word);
        }

        // 打印预期格式的结果
        System.out.println(bigMap);
    }
}

运行后输出就是你要的:{a=[albert, alice], b=[ben], c=[cecilia]}

方法二:Java 8+ Stream API(简洁高效)

如果你的项目用的是Java 8或更高版本,用Stream的groupingBy收集器能一行搞定分组,代码更简洁:

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class WordGroupingStream {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("albert", "ben", "alice", "cecilia");
        
        // 一行完成分组逻辑
        Map<String, List<String>> bigMap = words.stream()
                .collect(Collectors.groupingBy(word -> String.valueOf(word.charAt(0))));

        System.out.println(bigMap);
    }
}

额外注意事项

  • 空字符串处理:如果单词列表里可能存在空字符串,word.charAt(0)会抛出StringIndexOutOfBoundsException,可以加个判断跳过空值:
    for (String word : words) {
        if (word.isEmpty()) continue;
        // 后续逻辑不变
    }
    
  • 大小写兼容:如果需要忽略首字母大小写(比如"Albert"和"albert"分到同一组),可以把首字符转成小写/大写:
    String firstChar = String.valueOf(word.charAt(0)).toLowerCase();
    
  • 有序输出:如果希望Map的键按字母顺序排列,可以用TreeMap代替HashMap,初始化时改成:
    Map<String, List<String>> bigMap = new TreeMap<>();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:44