Java 8 - 如何将数组列表转换为特定 class 对象的列表

Java 8 - How to transform a List of arrays into a List of a specific class object

使用 Java 8 Stream 包,我想将对象类型数组列表转换为特定 class 对象的列表。第一个列表中的数组包含从数据库加载的 class 字段。

这是从数据库中加载的对象类型数组列表:

List<Object[]> results = loadFromDB();

列表中存在的每个元素 Object[] 都包含我想映射到以下 class:

的字段
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));
    }
}

如您所见,每个元素 Object[] 都存在于原始列表 results 中,它只是对象的数组表示形式 DeviationRisk

现在,我知道如何使用循环来做到这一点它只是 3 行代码,如下所示:

  List<DeviationRisk> deviations = new ArrayList<>();
        for (Object[] res : results) {
            deviations.add(new DeviationRisk(res));
        }

如何使用 Java 8 个流获得相同的结果?

您可以试试:

List<DeviationRisk> result = results.stream()
                                    .map(DeviationRisk::new)
                                    .collect(Collectors.toList())

这样做就可以了:

final List<DeviationRisk> l = results.stream()
    .map(DeviationRisk::new).collect(Collectors.toList());

之所以可行,是因为 DeviationRisk::new 被编译器视为 Function<Object[], DeviationRisk>