如何加入列表中特定属性的所有值?

时间:2014-04-23 12:31:08

标签: java

我想加入列表的所有String name属性,用斜杠/分隔。特别重要的是,例如。最后一个条目在末尾没有附加斜杠。

List<MyClass> list;

class MyClass {
   String name;
}

这样做的最佳方式是什么(我不能使用Java 8)。是否有任何库,例如Guava,提供开箱即用的功能,而且我可能还没找到?

1 个答案:

答案 0 :(得分:5)

Guava提供了一种Lists.transform方法,可以将所有name属性提取到列表中,如下所示:

List<String> names = Lists.transform(list, new Function<MyClass,String>() {
    public String apply(MyClass obj) {
        return obj.name;
    }
});

它还提供string Joiner,可让您完成任务:

String namesSeparatedBySlash = Joiner.on("/").join(names);

当然,您可以在Lists.transform的调用中调用join来在一个语句中执行此操作,如下所示:

String namesSeparatedBySlash = Joiner
    .on("/")
    .join(
         Lists.transform(list, new Function<MyClass,String>() {
            public String apply(MyClass obj) {
                return obj.name;
            }
        })
    );