2016-03-04 47 views
6

目前我有該陣列的對象數組列表,我必須迭代並添加到我的LatestNewsDTO列表中,我在代碼工作下面做了什麼,但仍然不滿足於我的方式。他們是否有效的方式請讓我知道。如何在Java 8中迭代對象數組的列表並將其設置爲另一個對象列表?

感謝

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

回答

7

使用StreamObject[]陣列映射到LatestNewsDTO S和它們收集到一個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()); 

當然,如果你創建的LatestNewsDTO一個構造函數,接受數組,代碼會看起來更優雅。現在

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

LatestNewsDTO (Object[] objects)構造函數可以認爲解析數組並設置您的實例成員的邏輯。

+3

非常感謝你much.I會去,看起來很優雅第二種方法。 – anonymous

+5

你甚至可以做'.map(LatestNewsDTO :: new)' –

+0

@PeterLawrey謝謝你的方法也很好看。今天我學到了東西 – anonymous

1

根據彼得勞裏的評論,這種方式也看起來很棒,即使我已經接受了伊蘭的答案。

我已創建了對象

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

構造函數和我做這樣的

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

     List<LatestNewsDTO> latestNewsList = latestNewses.stream() 
       .map(LatestNewsDTO::new).collect(Collectors.toList()); 
相關問題