[
{"A": 50,
"B": 100,
"C": 200,
"D": "Auction"
},
{
"A": 101322143.24,
"B": 50243301.2,
"C": 569,
"D": "Sold Promissory Buyer"
},
{
"A": 500,
"B": 1000,
"C": 1500,
"D": "Auction"
}]
finalSalesReportForSoldProperty.stream().collect(Collectors.toMap(tags -> ((String) tags.get("D")).replaceAll("[\\- ]", ""), Function.identity()));
"Auction": {
"A": 550,
"B": 1100,
"C": 1650,
"D": "Auction"
} ,
"Sold Promissory Buyer" :{
"A": 101322143.24,
"B": 50243301.2,
"C": 569,
"D": "Sold Promissory Buyer"
}
是否可以通过Java流API?
您需要使用Tomap(keyMapper,valueMapper,mergeFunction)
收集器的mergeFunction
参数。该函数将对重复的值调用,并将这两个值合并为一个新值。
在这种情况下,我们需要通过将具有相同键的值求和来合并两个映射。最简单的解决方案是遍历第二个映射的所有条目,并合并第一个映射中的每个条目。如果映射不存在,将使用正确的值创建它。如果是,则新值将是当前两个值的和。
现在,假设每个值实际上都是double
:
finalSalesReportForSoldProperty.stream().collect(Collectors.toMap(
tags -> ((String) tags.get("assetStatus")).replaceAll("[\\- ]", ""),
Function.identity(),
(m1, m2) -> {
Map<String, Object> map = new HashMap<>(m1);
m2.entrySet().stream()
.filter(e -> e.getValue() instanceof Double)
.forEach(e -> map.merge(e.getKey(), e.getValue(), (o1, o2) -> ((Double) o1) + ((Double) o2)));
return map;
}
));
我在做一件简单的事情,想不出该怎么做。我有一个使用方法的ArrayList,我想立即将结果添加到一个新的ArrayList中。 所以我想做类似的操作,但这不是正确的方法。 对我的代码的任何其他部分的PS建议也会很感激。谢谢!
假设我有 但无法使其工作,很好奇是否有办法做到这一点 我现在得到的是以下解决方案,但我希望将其收集到map,而不必首先定义它:
我有一张这样的清单 在此基础上,我想创建一个如下所示的地图: 我试过了 但是没有得到期望值。我只得到最后一个元素。如果我将列表创建移到foreach循环之外,那么我将获得所有值。
问题内容: public List getContactsFromFirebase(){ FirebaseDatabase.getInstance().getReference().child(“Users”) .addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(
输入: 输出: 输入: 线程“main”java.lang.IllegalStateException中的异常:重复键-1.0 我怎么才能修好这个?
我有一个记录。 我的