如何在Java 8中迭代对象数组列表并将其设置为另一个对象列表?

10

目前我有一个对象数组列表,我需要迭代该数组并将其添加到我的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个回答

18

使用Stream将您的Object[]数组映射到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)构造函数可以包含解析数组并设置实例成员的逻辑。


3
非常感谢。我将选择第二种方法,因为它看起来非常优雅。 - soorapadman
7
你可以使用 .map(LatestNewsDTO::new) - Peter Lawrey
@PeterLawrey 谢谢,你的方法看起来也很不错。今天我学到了一些东西。 - soorapadman

0
根据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()); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接