【发布时间】:2015-03-26 03:50:53
【问题描述】:
使用 Java 8 Stream 包,我想将对象类型的数组列表转换为特定类对象的列表。第一个列表中的数组包含从数据库加载的类的字段。
这是从数据库加载的对象类型数组的列表:
List<Object[]> results = loadFromDB();
列表中的每个元素 Object[] 都包含我想要映射到以下类的字段:
class DeviationRisk {
Timestamp plannedStart;
Timestamp plannedEnd;
String rcsName;
BigDecimal riskValue;
BigDecimal mediumThreshold;
BigDecimal highThreshold;
Interval interval;
String getRcsName() {
return rcsName;
}
DeviationRisk(Object[] res) {
this((Timestamp) res[0], (Timestamp) res[1], (String) res[2], (BigDecimal) res[3], (BigDecimal) res[4], (BigDecimal) res[5]);
}
DeviationRisk(Timestamp start, Timestamp end, String rcs, BigDecimal risk, BigDecimal medium, BigDecimal high) {
plannedStart = start;
plannedEnd = end;
rcsName = rcs;
riskValue = risk;
mediumThreshold = medium;
highThreshold = high;
interval = new Interval(plannedStart.getTime(), plannedEnd.getTime());
}
DeviationRisk create(Object[] res) {
return new DeviationRisk(res);
}
List<DateTime> getRange() {
return DateUtil.datesBetween(new DateTime(plannedStart), new DateTime(plannedEnd));
}
}
您可以看到原始列表results 中存在的每个元素Object[] 它只是对象DeviationRisk 的数组表示
现在,我知道如何使用循环只需 3 行代码,如下所示:
List<DeviationRisk> deviations = new ArrayList<>();
for (Object[] res : results) {
deviations.add(new DeviationRisk(res));
}
如何使用 Java 8 Streams 实现相同的结果?
【问题讨论】:
标签: java arrays java-8 lambda java-stream