首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流到LinkedHashSet

流到LinkedHashSet
EN

Stack Overflow用户
提问于 2018-08-21 08:49:54
回答 3查看 21.2K关注 0票数 32

我想用自然顺序将.csv保存到LinkedHashSet,所以.csv的第一行应该是LinkedHashSet的第一个元素。

该文件如下所示:

代码语言:javascript
复制
java  
c  
c++  
assembly language  
swift  

我的代码如下:

代码语言:javascript
复制
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());
         }
    }
}

但它返回错误的顺序:

代码语言:javascript
复制
assembly language
c++
java
c
swift

我认为该流只是将其保存为HashSet。

是否可以使用流将其保存为LinkedHashSet?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-21 08:55:29

您只是不知道该工厂方法创建的特定类型(它是担保返回Set,其他什么都不知道)。

唯一可靠的方法是实际控制发生的事情,方法是以

代码语言:javascript
复制
... collect( Collectors.toCollection( LinkedHashSet::new ) );
票数 77
EN

Stack Overflow用户

发布于 2018-08-21 08:56:08

.collect(Collectors.toSet())不创建LinkedHashSet,而是创建常规HashSet。而是使用.collect(Collectors.toCollection(LinkedHashSet::new)来确保正在使用LinkedHashSet

票数 3
EN

Stack Overflow用户

发布于 2018-08-21 08:52:31

返回此集合中元素的迭代器。元素不按特定顺序返回(除非此集合是提供保证的某个类的实例)。

请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()

使用List而不是Set

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51944956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档