如何转换映射< string,map< string,string>>串
我有一个实体
public class Report {
private String departmentName;
private BigDecimal amount;
private String currency;
}
,我想根据货币计算每个部门的金额,并将结果写入行。 示例:
List<Report> list = new ArrayList<>();
list.add(new Report("Moscow", new BigDecimal(100), "USD"));
list.add(new Report("Moscow", new BigDecimal(100), "USD"));
list.add(new Report("Paris", new BigDecimal(100), "USD"));
list.add(new Report("Moscow", new BigDecimal(200), "RUR"));
结果:“莫斯科200 USD,巴黎100 USD,莫斯科200 rur”
为此:
Map<String, Map<String, String>> collect = list.stream().collect(
Collectors.groupingBy(doc -> doc.getDepartmentName(),
Collectors.groupingBy(Report::getCurrency,
Collectors.collectingAndThen(Collectors.toList(), doc -> {
BigDecimal sum = doc.stream()
.map(A::getAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
String cur = doc.stream().map(Report::getCurrency)
.findFirst().get();
return sum.toString() + " " + cur;
}))));
我收到结果:
{Paris={USD=100 USD}, Moscow={USD=200 USD, RUR= 200 RUR}} -- correct
但是我不知道如何转换Map&lt; string; string,map&lt; string,字符串&gt;&gt;到字符串
I have an entity
public class Report {
private String departmentName;
private BigDecimal amount;
private String currency;
}
and I want to calculate the amount for each department depending on the currency and write the result in the line.
Example:
List<Report> list = new ArrayList<>();
list.add(new Report("Moscow", new BigDecimal(100), "USD"));
list.add(new Report("Moscow", new BigDecimal(100), "USD"));
list.add(new Report("Paris", new BigDecimal(100), "USD"));
list.add(new Report("Moscow", new BigDecimal(200), "RUR"));
Result: "Moscow 200 usd, Paris 100 USD, Moscow 200 RUR"
For it:
Map<String, Map<String, String>> collect = list.stream().collect(
Collectors.groupingBy(doc -> doc.getDepartmentName(),
Collectors.groupingBy(Report::getCurrency,
Collectors.collectingAndThen(Collectors.toList(), doc -> {
BigDecimal sum = doc.stream()
.map(A::getAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
String cur = doc.stream().map(Report::getCurrency)
.findFirst().get();
return sum.toString() + " " + cur;
}))));
And I receive a result:
{Paris={USD=100 USD}, Moscow={USD=200 USD, RUR= 200 RUR}} -- correct
but I don't know how to convert Map<String, Map<String, String>> to String
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
打印
注意:由于地图是无序的,因此根据总和,其他报告等,元素的顺序可能不一致。
我不知道您的地图是否是按原样的,还是获得结果的方法,但是您也可以这样做。
e2.getKey()
)附加到其中。prints
Note: Since maps are unordered, the order of the elements may not be consistent from run to run based on sums, additional Reports, etc.
I don't know if your Map is required as is or a way to get the result, but you could also do it like this.
e2.getKey()
) to that.