如何更好地转换java中的所有Set元素?

时间:2013-01-17 19:54:17

标签: java performance set loops

我设置如下:

Set<String>

我需要Set make split by的每个元素;并创建仅包含第2个元素的新Set。我应该一个接一个地直接制作还是存在更好的方法? 感谢。

4 个答案:

答案 0 :(得分:2)

Set<String> suffixSet = new HashSet<String>();
for (String s : inputSet) {
      suffixSet.add(s.split(";")[1])
}

当s没有时,我还会为这种情况添加适当的错误检查和处理;本。

答案 1 :(得分:2)

如果你可以放宽对Set<String>作为Collection<String>的输出的约束,你可以使用Guava并推迟元素的转换,直到通过Collections2#transform()方法枚举元素。您只需编写自定义函数即可对单个元素执行拆分。

但是如果你不能/不应该放松这个约束,你最好留下已经提出的个别迭代(因为它更容易辨认)。

代码看起来像:

Set<String> input; //Given
Collection<String> output = Collections2.transform(input, new Function<String,String>() {
    @Override
    public String apply (String element) {
        // As JohnnyO says, add appropriate edge case checking...
        return element.split(";")[1]; 
    }
});

答案 2 :(得分:1)

由于您没有显示代码,我们只能猜测您要执行的操作。您需要遍历Set并拆分每个String。如果需要,可以使用split方法。

答案 3 :(得分:1)

用如此少的信息很难说。您可以在split进行迭代并添加到另一个Set 或者您可以将Set替换为例如HashMap当您创建地图时,将字符串的第一部分作为键,将第二部分作为值,以便在需要快速时检索第二部分。
或者,如果您自己创建字符串,请将它们直接放在不同的集合中 或者......(你说的不够)提供更多选择