根据类型的成员加入集合

Joining a collection based on members of the type

我有一个 class A 及其成员 b 和 c。 现在我用这个构造 List<A>

add(new A().setb("abcd").setc("123456"));
add(new A().setb("efgh").setc("789101"));
add(new A().setb("ijkl").setc("112345"));

我想将此列表转换为如下所示的字符串

abcd,123456
efgh,789101
ijkl,112345

现在最明显的方法是使用 StringBuilder 并遍历列表。现在我想使用 Guava Joiner like

来建立它
Joiner.on("\n").skipNulls().join(.......)

join() 方法需要一个可迭代对象。我能以某种方式通过 A.getb(),A.getc() Iterables.transform 有帮助吗?

有了Java8,就可以用

String result = as.stream().map((a) -> a.b + ',' + a.c).collect(Collectors.joining("\n"));

首先从 List 中的每个 A 元素生成一个 String,然后通过连接各个 String 值将其收集到 String换行符。

使用番石榴,您会得到与

类似的东西
String result = Joiner.on('\n').join(Iterables.transform(as, (a) -> a.b + ',' + a.c));

假设 as 是你的 List<A>

解决了!!

假设 List<A> 被称为 Alist

String join=Joiner.on("\n").skipNulls().join(Iterables.transform(Alist, new Function<A,String>(){
            public String apply(A input){
                return input.getb()+","+input.getc();
            }
        }));