【发布时间】:2019-01-27 10:08:03
【问题描述】:
我想以自然顺序将 .csv 保存到 LinkedHashSet,因此 .csv 的第一行应该是 LinkedHashSet 的第一个元素。
文件如下所示:
java
c
c++
assembly language
swift
我的代码是这样的:
public class test {
public static void main(String[] args) throws IOException {
final Charset ENCODING = Charset.forName("Cp1250");
Path fileToLoad = Paths.get("src/main/resources/test.csv");
Set<String> x = Files.lines(fileToLoad, ENCODING)
.map(Function.identity())
.collect(Collectors.toSet());
Iterator<String> it = x.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
但它返回错误的顺序:
assembly language
c++
java
c
swift
我认为该流只是将其保存为 HashSet。
是否可以将其保存为带流的 LinkedHashSet?
【问题讨论】:
-
那是因为
Collectors.toSet()不会使用LinkedHashSet,而只会使用HashSet。请改用Collectors.toCollection( LinkedHashSet::new )。 -
您似乎在寻找有序的
List结构,而不是非有序的Set; -
来自 javadoc 这是一个无序收集器 docs.oracle.com/javase/8/docs/api/java/util/stream/…
标签: java java-8 java-stream