我使用的文件包含以下内容:
“单词”,“wordtype”,“定义”
"Base","n.","长袍或衬裙的下半部分。"
“基地”,“n。”,“围裙。”
输出如下:
键:“base”值:[“word”“wordtype”“定义”,“Base”“n。”“长袍或衬裙的下半部分。”,“Base”“n。” “围裙。”]
key: "word"value: ["word""wordtype""definition", "Base""n.""长袍或衬裙的下半部分。", "Base""n.""围裙。"]
期望的结果:
键:“base”值:[“Base”“n。”“长袍或衬裙的下半部分。”,“Base”“n。”“围裙。”]
键:“word”值:[“word”“wordtype”“定义”]
有人能指出我正确的方向吗?
BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream(file)));
String line = null;
TreeMap<String, List<String>> def = new TreeMap<String, List<String>>();
List<String> values = new ArrayList<String>();
try {
while ((line = br.readLine()) != null) {
String []parts =line.split(",");
String key = null;
for (int i = 0; i < parts.length; i++){
key = parts[0];
}
values.add(parts[0] + parts[1] + parts[2]);
def.put(key.toLowerCase(), values);
}
最佳答案
一个Map
无法按您的要求工作。任意key
只能映射到单个value
.
如果您想要类似于您正在做的事情,但您可以拥有多个 values
对于给定的key
,你可以这样做:
List<Map.Entry<String, List<String>>> def = new ArrayList<>();
Map.Entry<String, List<String>> entry = new AbstractMap.SimpleEntry<>(key, list);
def.add(entry);
然后迭代你的 def
:
for (Map.Entry<String, List<String>> entry : def) {
System.out.println(String.format("Key: %s. Values: %s",
entry.getKey(),
Arrays.toString(entry.getValue().toArray())));
}
编辑:
对于您的评论:如果您愿意,您可以随时将自己的类型存储在Map
中(或者 List
如果您仍然需要重复的 key ):
class WordDescription {
final String wordType;
final String definition;
WordDescription(String wordType, String definition) {
this.wordType = wordType;
definition = definition;
}
String getWordType() {
return wordType;
}
String getDefinition() {
return definition;
}
}
并在 List<Map.Entry<String, WordDescription>>
中使用它。您可以制作wordType
一个enum
是否存在一组预定义的内容(形容词、名词等)。
关于java - 在 Java 中将两个值添加到 HashMap 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36380441/