【发布时间】:2020-02-04 21:56:51
【问题描述】:
我收到一个对象数组列表,
List<Object[]> rawRows = service.getRows();
任何特定的值都可以得到,例如
(Date)((Object[])rawRows.get(i))[3] // In each item, Array Element #3 is a certain Date
我需要将此映射到一个 POJO 的 List<Report>,该 POJO 为每个值定义了特定字段:
public class Report {
private String abbreviation;
private String username;
private Integer recallid;
private Date recalldate;
// ... + getters/setters
// Constructor
public Report (String abbreviation, String username, Integer recallid, Date recalldate, ...)
{
}
}
我对以下问题感到困惑:如何在此 Lamba 表达式中指定 index 以映射到我的新 List<Report>?
List<Report> detailReports = rawRows.stream().map(obj -> new Report(
(String)((Object[])rawRows.get(0))[0], // I'm hard-coding (0) but need "i"
(String)((Object[])rawRows.get(0))[1], // I'm hard-coding (0) but need "i"
(Integer)((Object[])rawRows.get(0))[2],// I'm hard-coding (0) but need "i"
(Date)((Object[])rawRows.get(0))[3], // I'm hard-coding (0) but need "i"
//...
)).collect(Collectors.toList());
我的目标是拥有一个List<Report>,其中所有数组元素都按照指定的顺序映射到每个对象的 POJO。但是没有i 索引供我跟踪。在此示例中,我将 0 硬编码为 rawRow 以从原始列表中获取。
【问题讨论】:
-
我认为你做错了,你应该在 lambda 表达式中使用
obj(String) obj[0] -
函数式编程的理念是让你的 lambda(function) 保持无状态。即,它不应该依赖外部变量 i 来确定值是什么。正如死侍所提到的,
obj足以让您达到预期的价值 -
谢谢你说的应该是obj[i]。