【问题标题】:Convert a list of Person object into a separated String by getName() property of Person object通过 Person 对象的 getName() 属性将 Person 对象列表转换为单独的 String
【发布时间】:2012-07-04 12:48:24
【问题描述】:

有没有XXXUtils可以做的地方

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

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

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

类似

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

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

【问题讨论】:

  • stackoverflow.com/questions/1515437/…这里有更多关于如何使用join方法的信息。
  • 好吧,但我没有字符串,我有人:)
  • 创建您自己的实用程序方法,该方法使用 BeanUtils.getArrayProperty() 并将检查的异常转换为运行时异常。

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


【解决方案1】:

Java 8 的实现方式:

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

或者只是

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

【讨论】:

  • 我知道这是一个旧答案,但有谁知道这些方法的效率如何?我知道流有一些开销来创建,但在处理大集合时工作得很好。如果我的集合大小小于 1000(例如 20-100),此解决方案会有效吗?
【解决方案2】:

我不知道,但您可以使用反射编写自己的方法,为您提供属性值列表,然后使用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"));

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 2020-12-04
    • 1970-01-01
    • 2021-08-15
    • 2013-01-31
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多