如何迭代对象数组列表并设置为java 8中的另一个对象列表?

时间:2016-03-04 07:51:11

标签: java java-8

目前我有来自该数组的对象数组列表我必须迭代并添加到我的LatestNewsDTO列表中我在代码工作下所做的事情但仍然不满意我的方式。他们有效的方式请告诉我。

由于

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

2 个答案:

答案 0 :(得分:8)

使用StreamObject[]数组映射到LatestNewsDTO并将其收集到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)构造函数可以保存解析数组的逻辑并设置实例的成员。

答案 1 :(得分:1)

根据Peter Lawrey的评论,即使我接受了Eran的答案,这种方式看起来也很棒。

我创建了带对象的构造函数

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