目前我有来自该数组的对象数组列表我必须迭代并添加到我的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);
});
答案 0 :(得分:8)
使用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)
构造函数可以保存解析数组的逻辑并设置实例的成员。
答案 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());