2016-03-04 13 views
6

Attualmente ho una lista di array di oggetti da quella matrice che devo fare per Iterate e aggiungere alla lista dei miei LatestNewsDTO quello che ho fatto sotto il codice funziona ma ancora non mi soddisfa a modo mio. È il loro modo efficace per favore fatemelo sapere.Come iterare Elenco di array di oggetti e impostare su un altro elenco di oggetti in java 8?

Grazie

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

risposta

7

Utilizzare un Stream per mappare le vostre Object[] matrici per LatestNewsDTO s e raccoglierli in un 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()); 

Naturalmente, se si crea un costruttore di LatestNewsDTO che accetta il l'array, il codice apparirà più elegante.

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

Ora il costruttore LatestNewsDTO (Object[] objects) può contenere la logica che analizza l'array e imposta i membri della vostra istanza.

+3

Grazie molto much.I andrà per secondo approccio che sembrano molto elegante. – anonymous

+5

Puoi anche fare '.map (LatestNewsDTO :: new)' –

+0

@PeterLawrey Grazie Anche il tuo approccio è bello. Ho imparato qualcosa oggi – anonymous

1

Come commenta Peter Lawrey, anche questo aspetto sembra ottimo anche se ho accettato la risposta Eran.

ho creato il costruttore con oggetti

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

e ho fatto come questo

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

     List<LatestNewsDTO> latestNewsList = latestNewses.stream() 
       .map(LatestNewsDTO::new).collect(Collectors.toList()); 
Problemi correlati