将Person对象列表按照其getName()属性分隔成一个字符串

8

是否有一个XXXUtils工具类,可以进行

String s = XXXUtils.join(aList, "name", ",");

这里的"name"是从aList对象的JavaBeans属性中获取的。

我只找到StringUtilsjoin方法,但它只能将一个List<String>转换成一个用分隔符分隔的String

需要类似下面的操作:

StringUtils.join(BeanUtils.getArrayProperty(aList, "name"), ",")

这很快并值得使用。BeanUtils抛出了2个已检查异常,所以我不喜欢它。


请点击此处获取更多关于如何使用join方法的信息:https://dev59.com/onI_5IYBdhLWcg3wHvU5 - Vince V.
1
嗯,但我没有String,我有Person :) - Cosmin Cosmin
1
创建你自己的实用程序方法,使用BeanUtils.getArrayProperty()并将已检查的异常转换为运行时异常。 - JB Nizet
2个回答

15

使用Java 8的方式:

String.join(", ", aList.stream()
    .map(Person::getName)
    .collect(Collectors.toList())
);

或者只是

aList.stream()
    .map(Person::getName)
    .collect(Collectors.joining(", ")));

我知道这是一个旧答案,但有人知道这些有多有效吗?我知道流创建时有一些开销,但在处理大型集合时效果非常好。如果我的集合大小小于1000,例如20-100,那么这个解决方案是否有效呢? - Spik330

3

我不知道是否有现成的方法,但是你可以使用反射编写自己的方法来获取属性值列表,然后使用StringUtils进行连接:

public static <T> List<T> getProperties(List<Object> list, String name) throws Exception {
    List<T> result = new ArrayList<T>();
    for (Object o : list) {
        result.add((T)o.getClass().getMethod(name).invoke(o)); 
    }
    return result;
}

要获取您的加入,请执行以下操作:
List<Person> people;
String nameCsv = StringUtils.join(getProperties(people, "name"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接