获取Java中的Set的单个条目?

时间:2015-10-07 02:43:01

标签: java string list object set

所以我目前在理解如何访问集合时遇到问题,甚至是允许的?所以我理解我的名字集包含一组Character对象。我也明白我的toString()方法调用会将这些Character对象转换为String,而不是传统的字符串 - 这就是为什么我有[s,a]而不是[sa].所以我的问题是,是如果有办法让我有一个单独的字符串列表。所以我希望我的列表是= [s, a]而不是[ [s,a] ].这是否可能?如果这没有意义,我道歉;尽管如此,如果你理解我的错误解释,谢谢你的时间和帮助。如果你需要我解释更多,我会。

    //this all works
    Set<Character> names = find(prefix).getRollCall().keySet();
    //[s,a]
    String lists = names.toString();
    //[s,a]
    List<String> sloop = Arrays.asList(lists);
    //[[s,a]]

3 个答案:

答案 0 :(得分:3)

如果您想将Set<Character>转换为List<Character>,您可以

List<Character> list = new ArrayList<Character>(set);

如果您想将Set<Character>转换为List<String>,您可以

List<String> list = new ArrayList<String>();
for (char c : set)
    list.add("" + c);

答案 1 :(得分:2)

根本不使用toString()。迭代Set的元素并构建你喜欢的任何字符串。

Set<Character> names = find(prefix).getRollCall().keySet();
for (Character c : names)
{
    // whatever you like
}

答案 2 :(得分:1)

让我解释一下代码中发生了什么,万一你不清楚:

String lists = names.toString();

这为集合调用标准toString方法,该集合将您的集合转换为标准格式的普通(常规)字符串(即括号中的逗号分隔)。创建的字符串没有什么特别之处:&#34; [s,a]&#34;。

List<String> sloop = Arrays.asList(lists);

asList方法接受一个或多个参数并将它们转换为列表。因为您只给出了一个参数lists,所以它创建了一个包含单个字符串元素的列表:(&#34; [s,a]&#34;)

然后,我怀疑你做的事情如下:

System.out.println(sloop);

这再次调用集合的标准toString方法(在本例中为List sloop)并再次创建逗号分隔,括号括起的标准字符串:&#34; [[s,a ]&#34;

所以,大部分可能不是你想要的。您的lists变量不是List,而是String,我认为它不是您想要的。

如果您只是想将您的字符集转换为字符串列表,那么在Java 8中这非常简单:

List<String> lists = names.stream().map(Character::toString).collect(Collectors.toList());