我从mysql中选择了一些数据。然后我想格式化它。数据如下所示:
var json = [
{
"date": "2016-01",
"number": "1",
"code": "420000",
"type": "false"
},
{
"date": "2016-01",
"number": "2",
"code": "440000",
"type": "false"
},
{
"date": "2016-02",
"number": "3",
"code": "420000",
"type": "false"
},
{
"date": "2016-03",
"number": "4",
"code": "420000",
"type": "true"
},
{
"date": "2016-03",
"number": "5",
"code": "410000",
"type": "false"
},
{
"date": "2016-03",
"number": "6",
"code": "440000",
"type": "true"
},
{
"date": "2016-04",
"number": "7",
"code": "420000",
"type": "false"
},
{
"date": "2016-04",
"number": "8",
"code": "440000",
"type": "false"
}
];
console.log(json);
我想groupingBy
date,和partitioningBy
type,并将
缩小为地图。在格式化数据之后,就像
var json = {
"2016-01": {
"false": {
"420000": "1",
"440000": "2"
}
},
"2016-02": {
"false": {
"420000": "3"
}
},
"2016-03": {
"false": {
"410000": "5"
},
"true": {
"420000": "4",
"440000": "6"
}
},
"2016-04": {
"false": {
"420000": "7",
"440000": "8"
}
}
};
console.log(json);
我编码java8流
public static void main(String[] args) {
List<Map<String, String>> postmans = new ArrayList<>();
// "420000" : post area code, "false": just paper(without goods)
postmans.add(createMap("2016-01", "1", "420000", "false"));
postmans.add(createMap("2016-01", "2", "440000", "false"));
postmans.add(createMap("2016-02", "3", "420000", "false"));
postmans.add(createMap("2016-03", "4", "420000", "true"));
postmans.add(createMap("2016-03", "5", "410000", "false"));
postmans.add(createMap("2016-03", "6", "440000", "true"));
postmans.add(createMap("2016-04", "7", "420000", "false"));
postmans.add(createMap("2016-04", "8", "440000", "false"));
// before, I use fastjson Library
System.out.println(JSONObject.toJSONString(postmans));
Map<String, Map<Boolean, Map>> data = postmans.stream()
.collect(Collectors.groupingBy(d -> d.get("date"), TreeMap::new,
Collectors.partitioningBy(d-> d.get("type").equals("true"),
Collectors.reducing(new HashMap(), (d1, d2)->{
Object code = d2.get("code");
Object number = d2.get("number");
// I think bug in reducing
d1.put(code, number);
return d1;
}))));
// after, I use fastjson Library
System.out.println(JSONObject.toJSONString(data));
}
private static Map<String,String> createMap(String date, String number, String code, String type){
Map<String, String> map = new HashMap<>();
map.put("date", date);
map.put("number", number);
map.put("code", code);
map.put("type", type);
return map;
}
但是,真正的结果是
var json = {
"2016-01": {
"false": {
"410000": "5",
"420000": "7",
"440000": "8"
},
"true": {
"410000": "5",
"420000": "7",
"440000": "8"
}
},
"2016-02": {
"false": {
"410000": "5",
"420000": "7",
"440000": "8"
},
"true": {
"410000": "5",
"420000": "7",
"440000": "8"
}
},
"2016-03": {
"false": {
"410000": "5",
"420000": "7",
"440000": "8"
},
"true": {
"410000": "5",
"420000": "7",
"440000": "8"
}
},
"2016-04": {
"false": {
"410000": "5",
"420000": "7",
"440000": "8"
},
"true": {
"410000": "5",
"420000": "7",
"440000": "8"
}
}
};
console.log(json);
我认为这个bug的原因在
reduing
。当分区通过
得到一个新的List
我只想
partitioningBy
result,每个列表
我很抱歉代码太长了,我的英语很差。谢谢你帮我!
这里有两个主要错误。Collectors.reducing
,因为这是一个缩减,需要一直返回一个新实例,基本上第二个是你的逻辑有缺陷:
Map<String, Map<Boolean, Map<String, String>>> data = postmans.stream()
.collect(Collectors.groupingBy(
d -> d.get("date"),
TreeMap::new,
Collectors.partitioningBy(
d -> d.get("type").equals("true"),
Collectors.reducing(
new HashMap<>(),
(left, right) -> {
Map<String, String> map = new HashMap<>();
String leftCode = left.get("code");
String leftNumber = left.get("number");
if (leftCode == null) {
map.putAll(left);
} else {
map.put(leftCode, leftNumber);
}
String rightCode = right.get("code");
String rightNumber = right.get("number");
map.put(rightCode, rightNumber);
return map;
}))));
您还存在将日期
存储为字符串
和执行树映射::新建
-基本上对字符串
排序的问题,这可能不是您想要的排序。一般来说,将所有内容都作为字符串
的整个方法使得代码几乎不可读。
由于使用分组样式的表视图的设计在iOS 7中发生了很大的变化,我想隐藏(或删除)第一节标题。到目前为止,我还没有做到这一点。 经过简化,我的代码如下所示: 如果我返回的高度为0,则不会使用节索引0调用其他两个方法。但是,仍然使用默认高度绘制空节标题。(在iOS 6中,调用这两个方法。但是,可见结果是相同的。) 如果返回不同的值,则节标题将获得指定的高度。 如果我返回0.01,它几乎是正确的。然而,
我试过这个: 我得到了这个错误:
问题内容: 单击Dialog_01的按钮 将隐藏 其窗口并打开Dialog_02。单击Dialog_02的按钮应 关闭 其窗口并 取消隐藏Dialog_01。如何实现呢? 问题答案: 将第一个窗口作为第二个窗口的父窗口: 如果您希望每次都显示相同的对话框,请执行以下操作: 和子窗口,而不是关闭它。
问题内容: 如何使用JSF显示/隐藏组件?我目前正尝试在javascript的帮助下做同样的事情,但没有成功。我不能使用任何第三方库。 谢谢| 阿比 问题答案: 通常,您需要通过其clientId获得该控件的句柄。本示例使用带有请求范围绑定的JSF2 Facelets视图来获取另一个控件的句柄: 确切的操作方式取决于您正在使用的JSF版本。有关较早的JSF版本,请参见此博客文章:JSF:使用组件标
问题内容: 现在我有两个视图控制器。我的问题是,更改为第二个视图控制器后,我不知道如何隐藏后退按钮。主要是我在Objective-C中找到的参考。如何快速编码? 在Objective-C中隐藏后退按钮代码 问题答案: 根据该文件为:
问题内容: 如何在Flutter应用中隐藏Android状态栏? 问题答案: SystemChrome.setEnabledSystemUIOverlays([]) 应该做你想做的。 您可以将其带回。 使用导入