【发布时间】:2017-06-20 11:42:21
【问题描述】:
希望有人可以帮助我。我有一个具有以下结构的 POJO:
public class Invoice{
private String docNum;
private String customer;
private ArrayList<InvoiceDetails> invoiceDetails;
/* Getters and setters*/
}
另外一个 POJO 如下
public class InvoiceDetails{
private String vatGroup;
private Double vatAmount;
private Double amount;
/* Getters and setters*/
}
除了我有以下第三个
public class VatType{
private String vatGroup;
private Double vatAmount;
private Double amount;
/* Getters and setters*/
}
我要做的是将Invoice 的List 减少为按vatGroup 分组的List 的VatType。就像SQL 中的DISTINCT 子句一样。
假设我有以下列表:
InvoiceDetails idA1 = new InvoiceDetails("S1", 100.0, 40.0);
InvoiceDetails idA2 = new InvoiceDetails("S2", 140.0, 40.0);
InvoiceDetails idA3 = new InvoiceDetails("A1", 50.0, 10.0);
ArrayList<InvoiceDetails> listA = new ArrayList<>();
listA.add(idA1);
listA.add(idA2);
listA.add(idA3);
Invoice invoiceA = new Invoice();
invoiceA.setDetailList(listA);
InvoiceDetails idB1 = new InvoiceDetails("S1", 200.0, 50.0);
InvoiceDetails idB2 = new InvoiceDetails("S2", 240.0, 50.0);
InvoiceDetails idB2 = new InvoiceDetails("A1", 100.0, 20.0);
ArrayList<InvoiceDetails> listB = new ArrayList<>();
listB.add(idB1);
listB.add(idB2);
listB.add(idB3);
Invoice invoiceB = new Invoice();
invoiceB.setDetailList(listB);
List<Invoice> invoiceList = new ArrayList<>();
invoiceList.add(invoiceA);
invoiceList.add(invoiceB);
预期的结果是Listof VatType,包含以下项目:
("S1",300.0,90.0)
("S2",380.0,90.0)
("A1",150.0,30.0)
如何一次性使用stream 获取此列表。避免遍历Lists?
提前致谢
【问题讨论】:
-
你检查过 Stream API 吗?
-
将
InvoiceDetailes和VatType中的公共部分提取到CommonClass中可能是个好主意,然后您可以对List<CommonClass>进行操作而不必转换列表 vica-反之亦然?
标签: java list java-8 java-stream pojo