这是我第一次在这个网站上询问,所以希望我没有弄乱任何格式化。无论如何,我在从地图中获取键/值对的值时遇到了一些麻烦。 我最初将密钥(可能很多字符串中的一个字符串“word”)与一个抽象的HashSet配对以保存“word” 但是,当我尝试打印出与键配对的值时,我希望它能够返回该集合。我收到“真实”。 关于如何打印出一组单词的任何建议?我是否必须使该集合非抽象才能生效?
提前感谢您的帮助!
/**
* Method that is used to load a file containing a list of words
*
* @param fileName the name of the file containing words
* either is .txt or .csv format
*/
@Override
public void initialize(String fileName) {
File file = new File(fileName);
String word;
try {
Scanner scan = new Scanner(file);
while (scan.hasNext()) {
word = scan.next();
for (int i = 0; i <= word.length(); i++) {
wordMap.putIfAbsent(word.substring(0, i), new HashSet<>().add(word));
System.out.println(wordMap.get(word.substring(0, i)));
}
}
} catch(IOException e){
//Exception handling stuff
}
}
答案 0 :(得分:2)
以下是HashSet.add
的{{3}}:
public boolean add(E e)
如果指定的元素尚不存在,则将其添加到此集合中。更正式地,如果此集合不包含元素e2(e == null?e2 == null:e.equals(e2)),则将指定元素e添加到此集合。如果此set已包含该元素,则调用将保持set不变并返回false。
换句话说,new HashSet<>().add(word)
始终是布尔true
,这就是你要添加的内容。
要在一个表达式中创建一个包含一个元素的新HashSet,可以使用new HashSet<>(Collections.singleton(word))
答案 1 :(得分:0)
您的地图应声明为:
Map<String,Set<String>> wordMap = new HashMap<>();
然后在你的循环中:
String key = word.subString(0, i);
wordMap.putIfAbsent(key, new HashSet<>());
wordMap.get(key).add(word);
答案 2 :(得分:0)
当你尝试新的Hashset时,它返回boolean,它本身就会产生编译错误。你可以尝试这样做:
for (int i = 0; i <= word.length(); i++) {
HashSet<String> hs=new HashSet<>();
hs.add(word);
wordMap.putIfAbsent(word.substring(0, i), hs);
// wordMap.putIfAbsent(word.substring(0, i), new HashSet<>().add(word));
System.out.println(wordMap.get(word.substring(0, i)));
}