7

XXXUtils nơi tôi có thể làmChuyển đổi một danh sách các đối tượng Person thành một chuỗi phân cách bằng getName() tài sản của đối tượng Person

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

nơi "name" là một tài sản JavaBeans từ đối tượng trong aList.

Tôi chỉ tìm thấy StringUtils có phương pháp join, nhưng nó chỉ biến đổi một List<String> thành một tách riêng String.

Something như

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

đó là nhanh chóng và Worths sử dụng. BeanUtils ném 2 ngoại lệ đã kiểm tra để tôi không thích nó.

+0

http://stackoverflow.com/questions/1515437/java-function-for-arrays-like-phps-join thêm thông tin tại đây cách sử dụng phương thức kết hợp. –

+0

vâng, nhưng tôi không có String, tôi có Person :) –

+1

Tạo phương thức tiện ích của riêng bạn sử dụng BeanUtils.getArrayProperty() và biến đổi các ngoại lệ đã kiểm tra thành các trường hợp thời gian chạy. –

Trả lời

2

Tôi không biết về bất kỳ, nhưng bạn có thể viết phương pháp của riêng bạn sử dụng phản ánh cung cấp cho bạn danh sách các giá trị tài sản, sau đó sử dụng StringUtils tham gia rằng:

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; 
} 

Để join của bạn, làm này:

List<Person> people; 
String nameCsv = StringUtils.join(getProperties(people, "name")); 
12

Java 8 cách để làm việc đó:

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

hoặc chỉ

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