在我的代码中我有
Files.lines(Paths.get(fileName), Charset.forName("Cp1252"))
.filter(k -> k != "")
.forEach(m -> hashmap.put(LocalDateTime.MIN, m));
从名为" info
"的文件中读取行。 (fileName
)。
1
2
3
4
5
(blank line)
但是,在扫描HashMap时,它告诉我使用此代码只插入了最后一行:
int x = 0;
for (HashMap.Entry<LocalDateTime, String> s : hashmap.entrySet()) {
x++;
System.out.println(hashmap.size() + ": " + x + ": " + s.getValue());
}
仅打印1: 1: 5
一次。
答案 0 :(得分:3)
问题是您的代码段会将同一个键下的所有行放入HashMap
。这段代码
.forEach(m -> hashmap.put(LocalDateTime.MIN, m));
从文件中获取每一行,并将其放在等于LocalDateTime.MIN
的键上。由于HashMap
不能包含多个相同的键,因此最后一项是forEach
完成后地图中唯一剩余的项目。
要解决此问题,请选择其他容器(例如列表),或使用不同的策略将密钥分配给从文件中读取的行。