Stream <string>仅从Files.lines()输入最后一行

时间:2015-06-25 00:02:44

标签: java hashmap java-8 java-stream

在我的代码中我有

Files.lines(Paths.get(fileName), Charset.forName("Cp1252"))
                .filter(k -> k != "")
                .forEach(m -> hashmap.put(LocalDateTime.MIN, m));

从名为&#34; info&#34;的文件中读取行。 (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一次。

1 个答案:

答案 0 :(得分:3)

问题是您的代码段会将同一个键下的所有行放入HashMap。这段代码

.forEach(m -> hashmap.put(LocalDateTime.MIN, m));

从文件中获取每一行,并将其放在等于LocalDateTime.MIN的键上。由于HashMap不能包含多个相同的键,因此最后一项是forEach完成后地图中唯一剩余的项目。

要解决此问题,请选择其他容器(例如列表),或使用不同的策略将密钥分配给从文件中读取的行。