gpt4 book ai didi

java - 对对象列表进行分组以创建扩展对象列表

转载 作者:搜寻专家 更新时间:2023-11-01 01:48:49 24 4
gpt4 key购买 nike

我有这些来自数据库的示例记录,它们是按查询分组的结果:

[
{
"name": "Troy",
"acct": 1123,
"type": " Savings",
"total": 50
},
{
"name": "Larry",
"acct": 4233,
"type": " Savings",
"total": 200
},
{
"name": "Troy",
"acct": 1123,
"type": " Current",
"total": 120
},
{
"name": "Larry",
"acct": 4233,
"type": " Current",
"total": 220
}
]

现在,我需要创建一个如下所示的报告:

[
{
"name": "Troy",
"acct": 1123,
"totalSavings": 50,
"totalCurrent": 120
},
{
"name": "Larry",
"acct": 4233,
"totalSavings": 200,
"totalCurrent": 220
}
]

.

public class DbTrans {
private String name;
private String acct;
private String type;
private double total;

// getters and setters
...
}

我已经尝试使用一些 lambda 技术,例如下面的技术,但我仍然没有接近我想要的解决方案。

 Map<String, List<DbTrans>> collect = transList.stream().collect(
Collectors.groupingBy(f -> f.getType()));

最佳答案

首先,响应 Dto 与请求 Dto 不同,我建议创建一个新的 Response 类以免调用它:

public class DbTransResponse {
private String name;
private String acct;
private double totalSavings;
private double totalCurrent;
// getters and setters
}

那么结果可以是这样的:

List<DbTransResponse> result = transList.stream()
.collect(Collectors.groupingBy(DbTrans::getAcct))
.values().stream()
.map(trans -> new DbTransResponse(
trans.get(0).getName(),
trans.get(0).getAcct(),
trans.get(0).getTotal(),
trans.get(1).getTotal()
)).collect(Collectors.toList());

我认为该列表应包含每个名称的两个条目,以便您可以从第一个条目 trans.get(0).getTotal() 中获取 totalSavingstotalCurrent 来自第二个 trans.get(1).getTotal()

如果您不确定是否可以使用条件来填充您的对象,例如如果没有设置默认值,您可以检查是否有两个元素。


Ideone demo

输出

DbTransResponse{name='Larry', acct='4233', totalSavings=200.0, totalCurrent=220.0}
DbTransResponse{name='Troy', acct='1123', totalSavings=50.0, totalCurrent=120.0}

关于java - 对对象列表进行分组以创建扩展对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com