2016-03-04 43 views
6

Hiện tại tôi có danh sách mảng đối tượng từ mảng đó tôi phải lặp lại và thêm vào danh sách LatestNewsDTO những gì tôi đã làm bên dưới mã làm việc nhưng tôi vẫn không thỏa mãn với cách của mình. Là cách hiệu quả của họ xin vui lòng cho tôi biết.Làm thế nào để lặp lại Danh sách mảng đối tượng và đặt thành một danh sách đối tượng khác trong java 8?

Cảm ơn

List<Object[]> latestNewses = latestNewsService.getTopNRecords(companyId, false, 3); 
List<LatestNewsDTO> latestNewsList = new ArrayList(); 
latestNewses.forEach(objects -> { 
    LatestNewsDTO latestNews = new LatestNewsDTO(); 
    latestNews.setId(((BigInteger) objects[0]).intValue()); 
    latestNews.setCreatedOn((Date) objects[1]); 
    latestNews.setHeadLine((String) objects[2]); 
    latestNews.setContent(((Object) objects[3]).toString()); 
    latestNews.setType((String) objects[4]); 
    latestNewsList.add(latestNews); 
}); 

Trả lời

7

Sử dụng một Stream để lập bản đồ Object[] mảng của bạn để LatestNewsDTO s và thu thập chúng thành một List:

List<LatestNewsDTO> latestNewsList = 
    latestNewses.stream() 
       .map(objects -> { 
        LatestNewsDTO latestNews = new LatestNewsDTO(); 
        latestNews.setId(((BigInteger) objects[0]).intValue()); 
        latestNews.setCreatedOn((Date) objects[1]); 
        latestNews.setHeadLine((String) objects[2]); 
        latestNews.setContent(((Object) objects[3]).toString()); 
        latestNews.setType((String) objects[4]); 
        return latestNews; 
       }) 
       .collect(Collectors.toList()); 

Tất nhiên, nếu bạn tạo một constructor của LatestNewsDTO mà chấp nhận mảng, mã sẽ trông thanh lịch hơn.

List<LatestNewsDTO> latestNewsList = 
    latestNewses.stream() 
       .map(objects -> new LatestNewsDTO(objects)) 
       .collect(Collectors.toList()); 

Bây giờ, nhà xây dựng LatestNewsDTO (Object[] objects) có thể giữ logic phân tích mảng và đặt thành viên trong trường hợp của bạn.

+3

Cảm ơn bạn rất much.I sẽ đi cho cách tiếp cận thứ hai mà trông rất thanh lịch. – anonymous

+5

Bạn thậm chí có thể làm '.map (LatestNewsDTO :: mới)' –

+0

@PeterLawrey Cảm ơn Cách tiếp cận của bạn cũng trông đẹp. Tôi đã học được điều gì đó ngày hôm nay – anonymous

1

Theo nhận xét của Peter Lawrey, cách này cũng có vẻ tuyệt vời mặc dù tôi chấp nhận câu trả lời của Eran.

tôi đã tạo các nhà xây dựng với các đối tượng

public LatestNewsDTO(Object[] objects) { 
     /**set all members instance 
    } 

Và tôi đã làm như thế này

List<Object[]> latestNewses = latestNewsService.getAllRecords(companyId, false); 

     List<LatestNewsDTO> latestNewsList = latestNewses.stream() 
       .map(LatestNewsDTO::new).collect(Collectors.toList()); 
Các vấn đề liên quan