如何将Set<String>值添加到新Set<String>集合?附Java代码片段
如何将Map中对应单词的翻译集合复制到新Set中?
需求:将
Set<String>类型的值添加至新的Set<String>集合中。以下是我在名为"dictionary"的类中编写的不完整代码:private Map<String, Set<String>> kaannokset; public OmaUseanKaannoksenSanakirja() { this.kaannokset= new HashMap<>(); } public void add(String word, String translate) { kaannokset.putIfAbsent(word, new HashSet<>()); kaannokset.get(word).add(translate); } public Set<String> translate(String word) { Set<String> listaus = new HashSet<>(); if (kaannokset.containsKey(word)) { listaus.add(kaannokset.get(wor...(代码未完成) } }请指导如何正确实现将对应单词的翻译集合添加到新
Set<String>集合的功能。
嗨,你已经完成了大部分工作啦,就差最后一步把已有翻译集合的元素批量添加到新集合里。这里给你两种靠谱的实现方式:
方法一:使用addAll()批量添加元素
Set接口提供了addAll(Collection<? extends E> c)方法,可以一次性把另一个集合的所有元素添加到当前集合中,这正是你需要的。同时注意修正代码里的拼写错误(wor...应该是word)。
完整的translate方法代码:
public Set<String> translate(String word) { Set<String> listaus = new HashSet<>(); if (kaannokset.containsKey(word)) { // 把对应单词的所有翻译批量添加到新集合 listaus.addAll(kaannokset.get(word)); } // 无论单词是否存在,都返回新集合(不存在则为空集合) return listaus; }
方法二:简化写法(利用Map.getOrDefault())
你还可以用Map的getOrDefault()方法来简化代码,省去containsKey()的判断:
public Set<String> translate(String word) { // 如果word不存在,返回空集合;否则复制其翻译集合到新HashSet中 return new HashSet<>(kaannokset.getOrDefault(word, Collections.emptySet())); }
这种写法更简洁,getOrDefault()会在找不到对应key时返回你指定的默认值(这里是空集合),然后直接用这个集合来初始化新的HashSet,一步到位。
额外的封装优化建议
如果你想避免外部调用者修改内部的翻译集合(保证数据安全性),可以返回一个不可变集合:
- Java 8及以下:用
Collections.unmodifiableSet()包装结果return Collections.unmodifiableSet(new HashSet<>(kaannokset.getOrDefault(word, Collections.emptySet()))); - Java 9及以上:用
Set.copyOf()更简洁return Set.copyOf(kaannokset.getOrDefault(word, Collections.emptySet()));
这样外部就不能修改返回的集合了,符合面向对象的封装原则。
内容的提问来源于stack exchange,提问作者Juho M
相关产品推荐
相关产品推荐

