通过Person对象的getName()属性将Person对象列表转换为单独的String

时间:2012-07-04 12:48:25

标签: java apache-commons separator apache-commons-collection apache-stringutils

我可以做XXXUtils

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

其中"name"是来自aList中对象的JavaBeans属性。

我发现只有StringUtils使用join方法,但它只将List<String>转换为单独的String

这样的东西
StringUtils.join(BeanUtils.getArrayProperty(aList, "name"), ",")

快速且值得使用。 BeanUtils会抛出2个已检查的异常,因此我不喜欢它。

2 个答案:

答案 0 :(得分:13)

Java 8的做法:

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

或只是

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

答案 1 :(得分: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"));