Java中如何将ConcurrentHashMap的值拆分后存入ArrayList
正确实现方案
你的代码核心问题是错误地直接对ConcurrentHashMap调用split方法(该类无此方法),且未正确遍历Map中的每个值。以下是两种可行的实现方式:
方式1:Lambda遍历(简洁高效)
利用ConcurrentHashMap的forEach方法遍历所有键值对,处理每个值的拆分与添加:
lemmas.forEach((key, value) -> { // 用正则匹配任意空白字符,兼容多空格/制表符场景 String[] words = value.split("\\s+"); // 批量添加拆分后的单词到corpus corpus.addAll(java.util.Arrays.asList(words)); });
方式2:传统循环(可读性强)
若更习惯传统循环写法,可遍历Map的Entry集合:
for (java.util.Map.Entry<String, String> entry : lemmas.entrySet()) { String value = entry.getValue(); // 跳过空值,避免无效拆分 if (value == null || value.trim().isEmpty()) { continue; } String[] words = value.split("\\s+"); for (String word : words) { corpus.add(word); } }
额外注意事项
- 用
\\s+替代" "拆分,可处理多个连续空格、制表符等空白场景,更健壮。 - 若存在空值或空白字符串,建议添加判断跳过,避免向corpus中加入空元素。
- ArrayList并非线程安全,若后续有并发写入需求,建议替换为
CopyOnWriteArrayList。
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

