2016-03-04 8 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

LatestNewsDTO秒にごObject[]配列をマッピングし、Listにそれらを収集するためにStreamを使用します。

もちろん
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

のようでした。 – anonymous

+5

あなたは '.map(LatestNewsDTO :: new)'を実行することもできます –

+0

@PeterLawreyありがとうあなたのアプローチも素晴らしく見えます。私は今日何かを学びました – anonymous

1

私はエランの答えを受け入れているにもかかわらず、この方法も素晴らしいように見えます。

私はオブジェクト

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

とコンストラクタを作成し、私はあなたが非常にmuch.I非常にエレガントに見える第二のアプローチのために行くだろうありがとうございました。この

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

     List<LatestNewsDTO> latestNewsList = latestNewses.stream() 
       .map(LatestNewsDTO::new).collect(Collectors.toList()); 
関連する問題