我想用自然顺序将.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?
发布于 2018-08-21 08:55:29
您只是不知道该工厂方法创建的特定类型(它是担保返回Set,其他什么都不知道)。
唯一可靠的方法是实际控制发生的事情,方法是以
... collect( Collectors.toCollection( LinkedHashSet::new ) );发布于 2018-08-21 08:56:08
.collect(Collectors.toSet())不创建LinkedHashSet,而是创建常规HashSet。而是使用.collect(Collectors.toCollection(LinkedHashSet::new)来确保正在使用LinkedHashSet。
发布于 2018-08-21 08:52:31
返回此集合中元素的迭代器。元素不按特定顺序返回(除非此集合是提供保证的某个类的实例)。
请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()
使用List而不是Set。
https://stackoverflow.com/questions/51944956
复制相似问题