gpt4 book ai didi

Java 流 - 映射列表到简化的映射列表

转载 作者:行者123 更新时间:2023-12-01 19:50:44 28 4
gpt4 key购买 nike

我希望将一个 map 列表转换为另一个分组的 map 列表。

所以我有以下 map 列表 -

List<Map<String, Object>

[{
"accId":"1",
"accName":"TestAcc1",
"accNumber":"101",
"currency":"USD",
"amount":"1000"
},
{
"accId":"1",
"accName":"TestAcc1",
"accNumber":"101",
"currency":"GBP",
"amount":"800"
},
{
"accId":"1",
"accName":"TestAcc1",
"accNumber":"101",
"currency":"EUR",
"amount":"900"
},
{
"accId":"2",
"accName":"TestAcc2",
"accNumber":"102",
"currency":"USD",
"amount":"9000"
},
{
"accId":"2",
"accName":"TestAcc2",
"accNumber":"102",
"currency":"GBP",
"amount":"8000"
},
{
"accId":"2",
"accName":"TestAcc2",
"accNumber":"102",
"currency":"EUR",
"amount":"9500"
}
]

引用数据表:

accId   accName     accNumber   currency    amount
1 TestAcc1 101 USD 1000
1 TestAcc1 101 GBP 800
1 TestAcc1 101 EUR 900
2 TestAcc2 102 USD 9000
2 TestAcc2 102 GBP 8000
2 TestAcc2 102 EUR 9500

我想将帐户的货币+金额分组为如下所示:

List<Map<String, Object>

[{
"accId":"1",
"accName":"TestAcc1",
"accNumber":"101",
"currencies":
{
"USD":"1000",
"GBP":"800",
"EUR","900"
}
},
{
"accId":"2",
"accName":"TestAcc2",
"accNumber":"102",
"currencies":
{
"USD":"9000",
"GBP":"8000",
"EUR","9500"
}
}
]

我想知道如何去做这件事。有人可以帮我吗?

最佳答案

这里最好利用组合 - 考虑创建这些类型的对象:

  • AccountInfo 包含帐户 ID、帐户名称和帐号(您需要它具有值语义,即实现 equalshashCode -参见例如 @EqualsAndHashCode )
  • AccountBalance 包含帐户货币和金额
  • AccountRecord 带有 AccountInfoAccountBalance
  • Account 带有 AccountInfoAccountBalance 列表

现在您想要简化AccountRecord流映射到Account流。这可以通过以下方式实现:

  1. 将您的对象映射到 AccountRecord 中。
  2. AccountInfo 分组。
  3. 根据 AccountInfoAccountRecord 列表构造一个 Account

示例:

Stream<AccountRecord> accountStream = Stream.of(); // your data here
List<Account> accountList = accountStream
.collect(Collectors.groupingBy(AccountRecord::getAccountInfo))
.entrySet().stream()
.map(entry -> new Account(
entry.getKey(),
entry.getValue().stream()
.map(AccountRecord::getAccountBalance)
.collect(Collectors.toList())
))
.collect(Collectors.toList());

关于Java 流 - 映射列表到简化的映射列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51378453/

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