Stream to LinkedHashSet

2022-09-01 09:23:28

我想用自然的顺序将.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?


答案 1

你根本不知道该工厂方法创建的特定类型(它保证返回Set,没有别)。

唯一可靠的方法是通过结束流操作来实际控制发生的事情

... collect( Collectors.toCollection( LinkedHashSet::new ) );

答案 2

不会创建一个 ,而是一个正则 。而是用于确保正在使用 a。.collect(Collectors.toSet())LinkedHashSetHashSet.collect(Collectors.toCollection(LinkedHashSet::new)LinkedHashSet


推荐