将Set <integer>转换为Java </string> </integer>中的Set <string>

时间:2011-05-10 17:49:47

标签: java string integer set

有没有一种简单的方法可以将Set<Integer>转换为Set<String>而无需遍历整个集合?

10 个答案:

答案 0 :(得分:9)

没有。最好的方法是循环。

HashSet<String> strs = new HashSet<String>(ints.size());
for(Integer integer : ints)
    strs.add(integer.toString());

简单而相对快速的简单而富有表现力的东西可能是最好的。

(更新:)在Java 8中,如果你想隐藏循环,可以使用lambda表达式完成同样的事情。

HashSet<String> strs = new HashSet<>(ints.size());
ints.forEach(i -> strs.add(i.toString()));

答案 1 :(得分:8)

使用Java8流图并收集能力:

 Set< String >  stringSet = 
   intSet.stream().map(e -> String.valueOf(e)).collect(Collectors.toSet());

答案 2 :(得分:6)

没有。您必须格式化每个整数并将其添加到字符串集。

答案 3 :(得分:2)

如果你真的不想遍历整个集合

,你可以使用装饰器

答案 4 :(得分:2)

你可以使用Commons Collections'TransformedSet或Guava的Collections2.transform(...)

在这两种情况下,您的仿函数可能只是简单地调用Integer的toString()。

答案 5 :(得分:1)

AFAIK,你必须遍历集合;特别是当涉及的转换不自然时。即如果您尝试从Set-Timestamp-转换为Set-Date-;您可以使用Java Generics的某些组合来实现这一点(因为Timestamp可以转换为Date)。但由于Integer无法转换为String,因此需要进行迭代。

答案 6 :(得分:1)

您可以自己实施Set<String>并将所有调用重定向到原始集,仅在需要时处理必要的转换。取决于该组的使用方式,可能表现得更好或更差。

答案 7 :(得分:1)

在Java 8中使用Eclipse Collections

Set<String> strings = IntSets.mutable.with(1, 2, 3).collect(String::valueOf);

这并不需要装箱int值和Integer,但如果需要你也可以这样做:

Set<String> strings = Sets.mutable.with(1, 2, 3).collect(String::valueOf);

Sets.mutable.with(1, 2, 3)将返回MutableSet<Integer>,与IntSets.mutable.with(1, 2, 3)不同,后者将返回MutableIntSet

注意:我是Eclipse Collections的提交者。

答案 8 :(得分:0)

private static <T> Set<T> toSet(Set<?> set) {
    Set<T> setOfType = new HashSet<>(set.size());
    set.forEach(ele -> {
        setOfType.add((T) ele);
    });
    return setOfType;
 }

答案 9 :(得分:0)

Java 7 + Guava(可能无法切换到Java 8)。

new HashSet<>(Collections2.transform(<your set of Integers>, Functions.toStringFunction()))