<Integer> 在 Java 中将"集合"转换为"设置"<String>



有没有一种简单的方法可以在不遍历整个集合的情况下将Set<Integer>转换为Set<String>

No.最好的方法是循环。

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()));

或者,使用流,

Set<String> strs = ints.stream().map(Integer::toString).collect(toSet());

使用 Java8 流图并收集能力:

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

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

如果您真的不想遍历整个集合,则可以使用装饰器

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

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

您可以

自己实现Set<String>并将所有调用重定向到原始集,仅在需要时处理必要的转换。根据该集的使用方式,性能可能会明显更好或明显更差。

AFAIK,你必须遍历集合;特别是当涉及到不自然的转换时,即如果你试图从 Set-Timestamp- 转换为 Set-Date-;你可以使用 Java 泛型的某种组合来实现这一点(因为时间戳可以强制转换为 Date)。但由于 Integer 不能强制转换为 String,因此您需要迭代。

将 Eclipse Collections 与 Java 8 结合使用:

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 的提交者。

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

7 + Guava(大概没有办法切换到Java 8)。

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

相关内容

  • 没有找到相关文章

最新更新