已知: 后端获取两个list数据
List<Map<String, Object>> list1
{
"缺陷数量": 1,
"设备名称": "a",
"厂家": "A"
}
{
"缺陷数量": 4,
"设备名称": "b",
"厂家": "B"
}
]
List<Map<String, Object>> list2
{
"投运数量": 8,
"设备名称": "a",
"厂家": "A"
},
{
"投运数量": 8,
"设备名称": "b",
"厂家": "B"
}
]
问题:
需要在controller层完成处理,求出缺陷率,但是不知道如何求解!
List<Map<String, Object>> resultList
JSON数据格式:
{
"缺陷率": 0.125,
"设备名称": "a",
"厂家": "A"
}
{
"缺陷率": 0.5,
"设备名称": "b",
"厂家": "B"
}
]
public Object getDefectRateOfAllMainDevice() {
// 获取总缺陷数据
List<Map<String, Object>> defectNumber = pocSpPdDefectService.getTheNumberOfAllDeviceDefect();
// 获取总投运数据
List<Map<String, Object>> usedNumber = pocSpPdDefectService.getTheNumberOfAllDeviceUsed();
// 传入的数据应确保已经合并同类项,并且没有坏数据,否则应当提前处理数据
// 缺陷率
double defectRate = 0.00;
// 创建返回前端的list
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
// 创建新插入resultList的map
Map<String, Object> resultMap;
// 遍历缺陷map
for(Map<String,Object> m1:defectNumber) {
// 创建map实例
resultMap = new HashMap<String, Object>();
// 获取map的设备名称
String equipmentName = m1.get("object_name").toString();
// 获取map的厂家名称
String manufactor = m1.get("manufacturer").toString();
// 循环,将数据类比
for(Map<String,Object> m2:usedNumber) {
// 判断厂家和设备名称相同的map
if (m2.get("object_name").toString().equals(equipmentName) && m2.get("manufacturer").toString().equals(manufactor)) {
// 求缺陷率
defectRate = Double.parseDouble(m1.get("number_of_defect").toString()) / Double.parseDouble(m2.get("usage_amount").toString());
// 放入返回结果
resultMap.put("defectRate", defectRate);
resultMap.put("object_name", m1.get("object_name"));
resultMap.put("manufacturer", m1.get("manufacturer"));
// 将新的map插入list
resultList.add(resultMap);
}
}
}
return ApiUtils.result(resultList);
}
可以把Map<String, Object>看作一个实体类对象。两个对象集合之间求缺陷率。通过遍历两对象集合判断对象中名称相同后,求缺陷率。
思路:
1.遍历List集合;
2.把集合中的元素转换为Map<String, Object>对象,获取缺陷对象;
3.再定义一个List,把所有的缺陷对象放在List;
4.遍历list,统计缺陷率。
public static void main(String[] args) {
List<Map<String, Object>> list1 = new ArrayList(2) {{
add(new HashMap(3) {{
put("缺陷数量", 1);
put("设备名称", "a");
put("厂家", "A");
}});
add(new HashMap(3) {{
put("缺陷数量", 4);
put("设备名称", "b");
put("厂家", "B");
}});
}};
List<Map<String, Object>> list2 = new ArrayList(2) {{
add(new HashMap(3) {{
put("投运数量", 8);
put("设备名称", "b");
put("厂家", "B");
}});
add(new HashMap(3) {{
put("投运数量", 8);
put("设备名称", "a");
put("厂家", "A");
}});
}};
list1.forEach(item -> {
loop1: for (String key : item.keySet()) {
for (Map<String, Object> map : list2) {
if (("厂家".equals(key) || "设备名称".equals(key)) && item.get(key).equals(map.get(key))) {
item.put("缺陷数量", Double.parseDouble(item.get("缺陷数量").toString()) / Double.parseDouble(map.get("投运数量").toString()));
break loop1;
}
}
}
});
System.out.println(list1);
}
运行效果: