如何以及何时转换不同类型对象的分组列表列表
How and when transform a list of grouped list of objects of different types
我想知道什么时候(在分组之后和收集到 List<List<Object>>
之前)和如何(收集后重新流式传输收集的组)。
我可以转换对象的每个子列表吗
[Exon{45 2021-01-01 4}, Exon{45 2021-01-01 4}, Sup{45 2021-01-01 4}]
and
[Exon{33 2023-01-01 2}, Sup{33 2023-01-01 2}]
and
[Exon{21 2022-01-01 5}, Sup{21 2022-01-01 5}]
转换为名为 GlobalData
?
的新对象类型
如有任何建议,我们将不胜感激。
这个问题与我之前的问题有关:
这是 Dan 提供的代码,用于将我的不同对象分组到收集到列表的对象列表中:
https://ideone.com/OSTItQ
public class GlobalData {
private UUID id = UUID.randomUUID();
private IncomeCode incomeCode;
private LocalDate endDate;
private String codeRef;
private boolean taxable;
private String pw = "";
private BigDecimal area = BigDecimal.ZERO;
//private BigDecimal taxableIncome = BigDecimal.ZERO;
private BigDecimal value = BigDecimal.ZERO;
private BigDecimal exonValueType = BigDecimal.ZERO;
private BigDecimal Income = BigDecimal.ZERO;
private BigDecimal exemptedIncome = BigDecimal.ZERO;
private BigDecimal refIncome = BigDecimal.ZERO;
}
List<GlobalData> globalTaxDataList = listRes.stream()
.map(this::toGlobalData)
.collect(Collectors.toList());
private GlobalData toGlobalData(List<Object> objects) {
GlobalData globalData = new GlobalData();
objects // list of mix Exons and Sups objects (Exon and Sup contain more, fields incomeCode, endDate and codeRef are used only for grouping) ex: [Exon{45 2021-01-01 4}, Exon{45 2021-01-01 4}, Sup{45 2021-01-01 4}]
.forEach(o -> {
if (o instanceof Exon) {
globalData.setValue(globalData.getValue()
.add(o.getValue()))
if (o.getxxx()> 100) {
globalData.setIncome(globalData.getIncome()
.add(calcMethod(o)))
}
//more business code here
}
if (o instanceof Sup) {
globalData.setValue(globalData.getValue()
.add(o.getValue()))
if (o.getxxx()> 100) {
globalData.setIncome(globalData.getIncome()
.add(calcMethod(o)))
}
//more business code here
}
});
return globalData;
}
在你之前的问题中,你有一个 List<List<Object>>
作为输出,而现在你想将每个 List<Object>
映射到一个 GlobalData
实例。
请注意,我只是根据我从你的问题中得到的一些细节给你这个答案,并且不知道你的 类.
之间的关系
List<GlobalData> listGlobalData = listMixed.stream()
.map(list -> {
//Mapping each list to a GlobalData object
//Retrieving an object from the list to create a GlobalData
Object firstObj = list.stream().findFirst().orElse(null);
if (firstObj == null) {
return null;
}
//Instacing a GlobalData with IncomeCode, EndDate and CodeRef
GlobalData gd = null;
if (firstObj.getClass() == Exon.class) {
Exon exon = (Exon) firstObj;
gd = new GlobalData(exon.getIncomeCode(), exon.getEndDate(), exon.getCodeRef());
} else {
Sup sup = (Sup) firstObj;
gd = new GlobalData(sup.getIncomeCode(), sup.getEndDate(), sup.getCodeRef());
}
//Updating the GlobalData with each object of the list
for (Object o: list){
if (o.getClass() == Exon.class){
Exon exon = (Exon) o;
gd.setValue(gd.getValue().add(exon.getValue()));
if (exon.getXxx() > 100){
gd.setIncome(calcMethod(exon));
}
} else {
Sup sup = (Sup) o;
gd.setValue(gd.getValue().add(sup.getValue()));
if (sup.getXxx() > 100){
gd.setIncome(calcMethod(sup));
}
}
}
return gd;
})
.filter(obj -> obj != null)
.collect(Collectors.toList());
这里还有一个 link 我已经发布了我的整个解决方案来测试上面的代码。但是,由于托管解决方案的服务器存在执行时间限制,因此不会显示输出,但您仍然可以检查 link 以复制代码并在您的计算机上进行测试。
我还提供了一些虚拟 类 来模拟示例中显示的某些方法的行为。
我想知道什么时候(在分组之后和收集到 List<List<Object>>
之前)和如何(收集后重新流式传输收集的组)。
我可以转换对象的每个子列表吗
[Exon{45 2021-01-01 4}, Exon{45 2021-01-01 4}, Sup{45 2021-01-01 4}]
and
[Exon{33 2023-01-01 2}, Sup{33 2023-01-01 2}]
and
[Exon{21 2022-01-01 5}, Sup{21 2022-01-01 5}]
转换为名为 GlobalData
?
如有任何建议,我们将不胜感激。
这个问题与我之前的问题有关:
这是 Dan 提供的代码,用于将我的不同对象分组到收集到列表的对象列表中: https://ideone.com/OSTItQ
public class GlobalData {
private UUID id = UUID.randomUUID();
private IncomeCode incomeCode;
private LocalDate endDate;
private String codeRef;
private boolean taxable;
private String pw = "";
private BigDecimal area = BigDecimal.ZERO;
//private BigDecimal taxableIncome = BigDecimal.ZERO;
private BigDecimal value = BigDecimal.ZERO;
private BigDecimal exonValueType = BigDecimal.ZERO;
private BigDecimal Income = BigDecimal.ZERO;
private BigDecimal exemptedIncome = BigDecimal.ZERO;
private BigDecimal refIncome = BigDecimal.ZERO;
}
List<GlobalData> globalTaxDataList = listRes.stream()
.map(this::toGlobalData)
.collect(Collectors.toList());
private GlobalData toGlobalData(List<Object> objects) {
GlobalData globalData = new GlobalData();
objects // list of mix Exons and Sups objects (Exon and Sup contain more, fields incomeCode, endDate and codeRef are used only for grouping) ex: [Exon{45 2021-01-01 4}, Exon{45 2021-01-01 4}, Sup{45 2021-01-01 4}]
.forEach(o -> {
if (o instanceof Exon) {
globalData.setValue(globalData.getValue()
.add(o.getValue()))
if (o.getxxx()> 100) {
globalData.setIncome(globalData.getIncome()
.add(calcMethod(o)))
}
//more business code here
}
if (o instanceof Sup) {
globalData.setValue(globalData.getValue()
.add(o.getValue()))
if (o.getxxx()> 100) {
globalData.setIncome(globalData.getIncome()
.add(calcMethod(o)))
}
//more business code here
}
});
return globalData;
}
在你之前的问题中,你有一个 List<List<Object>>
作为输出,而现在你想将每个 List<Object>
映射到一个 GlobalData
实例。
请注意,我只是根据我从你的问题中得到的一些细节给你这个答案,并且不知道你的 类.
之间的关系List<GlobalData> listGlobalData = listMixed.stream()
.map(list -> {
//Mapping each list to a GlobalData object
//Retrieving an object from the list to create a GlobalData
Object firstObj = list.stream().findFirst().orElse(null);
if (firstObj == null) {
return null;
}
//Instacing a GlobalData with IncomeCode, EndDate and CodeRef
GlobalData gd = null;
if (firstObj.getClass() == Exon.class) {
Exon exon = (Exon) firstObj;
gd = new GlobalData(exon.getIncomeCode(), exon.getEndDate(), exon.getCodeRef());
} else {
Sup sup = (Sup) firstObj;
gd = new GlobalData(sup.getIncomeCode(), sup.getEndDate(), sup.getCodeRef());
}
//Updating the GlobalData with each object of the list
for (Object o: list){
if (o.getClass() == Exon.class){
Exon exon = (Exon) o;
gd.setValue(gd.getValue().add(exon.getValue()));
if (exon.getXxx() > 100){
gd.setIncome(calcMethod(exon));
}
} else {
Sup sup = (Sup) o;
gd.setValue(gd.getValue().add(sup.getValue()));
if (sup.getXxx() > 100){
gd.setIncome(calcMethod(sup));
}
}
}
return gd;
})
.filter(obj -> obj != null)
.collect(Collectors.toList());
这里还有一个 link 我已经发布了我的整个解决方案来测试上面的代码。但是,由于托管解决方案的服务器存在执行时间限制,因此不会显示输出,但您仍然可以检查 link 以复制代码并在您的计算机上进行测试。
我还提供了一些虚拟 类 来模拟示例中显示的某些方法的行为。