我有一个数据表List<APIQueue>
,它以6元组的形式依次存储为PARAM_KEY / VALUE。我需要创建一个List<APIBean>
,将它们分成行bean。
public class APIQueue extends {
private Integer id;
private Integer transactionId;
private String parameterKey;
private String parameterValue;
// + Getters/setters...
}
目标豆
public class APIBean {
public String applId;
public String transactionType;
public String phsOrgCode;
public String roleTypeCode;
public String personId;
public String versionId;
public APIBean(String applId, String transactionType, String phsOrgCode, String roleTypeCode, String personId,
String versionId) {
this.applId = applId;
this.transactionType = transactionType;
this.phsOrgCode = phsOrgCode;
this.roleTypeCode = roleTypeCode;
this.personId = personId;
this.versionId = versionId;
}
// + Getters/Setters
我需要按行索引分开。保证APPLID为#1,TRANSACTIONTYPE#2等。
我想知道是否应该只对while
做一个连续的unitCount += 5
循环,也许这样会更容易填充bean列表。但是,如果Lambdas是更好的解决方案,我可以使用它。
顺序读取的预期结果List<APIBean>
:
9643874 | U | CA | GS | 7734701 | M
9645606 | U | CA | GS | 7734701 | M
这将如何实施?我只熟悉以下构造函数映射,不适用于此处。
List<APIQueue> apiQueueData = getAPIQueueData();
// Can't use that here
List<APIBean> apiBeans = apiQueueData.stream().map(obj -> new APIBean(obj.getField1(), obj.getField2(), ...));
答案 0 :(得分:2)
Java 8流主要用于独立处理元素,但是您正在使用来自6个连续元素的数据来创建一个输出元素。您需要执行以下操作将其分为子列表并进行处理:
List<APIBean> apiBeans = IntStream.range(0, apiQueueData.size() / 6)
.mapToObj(i -> apiQueueData.subList(i * 6, (i + 1) * 6))
.map(data -> {
String applId = data.get(0).getParameterValue();
String transactionType = data.get(1).getParameterValue();
String phsOrgCode = data.get(2).getParameterValue();
String roleTypeCode = data.get(3).getParameterValue();
String personId = data.get(4).getParameterValue();
String versionId = data.get(5).getParameterValue();
return new APIBean(applId, transactionType, phsOrgCode, roleTypeCode, personId, versionId);
})
.collect(Collectors.toList());
对于这个问题,我建议改用迭代器:
List<APIBean> apiBeans = new ArrayList<>();
Iterator<APIQueue> i = apiQueueData.iterator();
while (i.hasNext()) {
String applId = i.next().getParameterValue();
String transactionType = i.next().getParameterValue();
String phsOrgCode = i.next().getParameterValue();
String roleTypeCode = i.next().getParameterValue();
String personId = i.next().getParameterValue();
String versionId = i.next().getParameterValue();
apiBeans.add(new APIBean(applId, transactionType, phsOrgCode, roleTypeCode, personId, versionId));
}