优化一下代码 JSONObject typeObj = new JSONObject(); Map<String, Integer> typeMap = new HashMap<>(); typeMap.put(SpecialWorkType.FIRE_WORK.desc, 0); typeMap.put(SpecialWorkType.CONFINED_WORK.desc, 0); typeMap.put(SpecialWorkType.MAINTENANCE_WORK.desc, 0); typeMap.put(SpecialWorkType.HIGH_WORK.desc, 0); typeMap.put(SpecialWorkType.LIFTING_WORK.desc, 0); typeMap.put(SpecialWorkType.ELECTRICIAN_WORK.desc, 0); typeMap.put(SpecialWorkType.LAND_WORK.desc, 0); typeMap.put(SpecialWorkType.ROAD_WORK.desc, 0); specialOperations.forEach(v -> { Integer domainCount = domainMap.get(v.getDomainId()); if (domainCount == null) { domainMap.put(v.getDomainId(), 1); } else { domainMap.put(v.getDomainId(), ++domainCount); } Integer typeCount = typeMap.get(v.getJobType().desc); typeMap.put(v.getJobType().desc, ++typeCount); });
时间: 2024-03-20 08:44:42 浏览: 68
可以尝试使用更简洁的方式来优化这段代码,如下所示:
```
Map<Long, Integer> domainMap = specialOperations.stream()
.collect(Collectors.groupingBy(SpecialOperation::getDomainId, Collectors.summingInt(e -> 1)));
Map<String, Integer> typeMap = specialOperations.stream()
.collect(Collectors.groupingBy(v -> v.getJobType().desc, Collectors.summingInt(e -> 1)));
```
这里使用了Java 8引入的Stream API,利用 `Collectors.groupingBy()` 方法将特定属性相同的对象进行分组,并使用 `Collectors.summingInt()` 方法进行计数。这样可以简化代码,并提高代码的可读性和可维护性。
相关问题
string 转List<map>
在Java中,将字符串转换为List<Map>的方法有多种。一种常见的方法是使用JSON解析库,如Jackson或Gson,来将字符串转换为Java对象。这些库具有将JSON字符串转换为具体类型的功能。
首先,您需要将字符串解析为JSON对象。然后,您可以使用类型引用来指定要转换的目标类型,即List<Map<String, Object>>>。以下是一个示例代码:
```java
// 导入相关的类
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
// 创建一个ObjectMapper对象
ObjectMapper objectMapper = new ObjectMapper();
// 将字符串解析为List<Map<String, Object>>类型的对象
List<Map<String, Object>> list = objectMapper.readValue(string, new TypeReference<List<Map<String, Object>>>(){});
```
在上面的代码中,`string`是要转换的字符串。`objectMapper.readValue()`方法将字符串解析为List<Map<String, Object>>类型的对象。
另一种常见的方法是使用org.json库将字符串转换为JSONArray,并使用循环遍历来将JSON对象转换为Map对象。以下是一个示例代码:
```java
// 导入相关的类
import org.json.JSONArray;
import org.json.JSONObject;
// 将字符串解析为JSONArray
JSONArray jsonArray = new JSONArray(string);
// 创建一个List<Map<String, Object>>对象
List<Map<String, Object>> list = new ArrayList<>();
// 遍历JSONArray,并将每个JSON对象转换为Map对象
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Map<String, Object> map = new HashMap<>();
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
Object value = jsonObject.get(key);
map.put(key, value);
}
list.add(map);
}
```
在上面的代码中,`string`是要转换的字符串。首先,我们将字符串解析为JSONArray对象。然后,我们创建一个List<Map<String, Object>>对象,并遍历JSONArray来将每个JSON对象转换为Map对象,并将其添加到List中。
这些是将字符串转换为List<Map>的两种常见方法。您可以根据您的实际需求选择适合您的方法。
Map<String, Object> map = new HashMap<String, Object>(); map.put("createdateGt",tbOrderInfo.getCreatedateGt()); map.put("createdateLt",tbOrderInfo.getCreatedateLt()); map.put("saleOrderId",tbOrderInfo.getSaleOrderId()); map.put("hm",tbOrderInfo.getHm()); map.put("orderDetail",tbOrderInfo.getOrderDetail()); map.put("cityCode",tbOrderInfo.getCityCode()); map.put("status",tbOrderInfo.getStatus()); map.put("areaCode",tbOrderInfo.getAreaCode()); map.put("orderType",tbOrderInfo.getOrdertype()); page= tbOrderInfoService.findByPage(map, page); for (TbOrderInfo orderInfo1 : page.getItems()) { List<Map<String, Object>> usermap = tbUserInfoService.findCustom("select * from tb_User_Info where (username = #{p[0]} or phone =#{p[0]}) and isDelete = 0", new Object[]{orderInfo1.getDistribId()}); if (!usermap.isEmpty()) { orderInfo1.setJson(new JSONObject().fluentPut("area2", usermap.get(0).get("AREA2"))); } } for (TbOrderInfo orderInfo1 : page.getItems()) { List<Map<String, Object>> usermap = tbUserInfoService.findCustom("select * from tb_User_Info where (username = #{p[0]} or phone =#{p[0]}) and isDelete = 0", new Object[]{orderInfo1.getDistribId()}); if (!usermap.isEmpty()) { orderInfo1.setJson(new JSONObject().fluentPut("level", usermap.get(0).get("level"))); } }怎么改,不要findCustom并且改为list
要将代码中的 `findCustom` 方法替换为使用 `List`,你可以使用 `JdbcTemplate` 类提供的 `queryForList` 方法来执行 SQL 查询并返回结果列表。下面是修改后的代码示例:
```java
Map<String, Object> map = new HashMap<String, Object>();
map.put("createdateGt", tbOrderInfo.getCreatedateGt());
map.put("createdateLt", tbOrderInfo.getCreatedateLt());
map.put("saleOrderId", tbOrderInfo.getSaleOrderId());
map.put("hm", tbOrderInfo.getHm());
map.put("orderDetail", tbOrderInfo.getOrderDetail());
map.put("cityCode", tbOrderInfo.getCityCode());
map.put("status", tbOrderInfo.getStatus());
map.put("areaCode", tbOrderInfo.getAreaCode());
map.put("orderType", tbOrderInfo.getOrdertype());
page = tbOrderInfoService.findByPage(map, page);
for (TbOrderInfo orderInfo1 : page.getItems()) {
List<Map<String, Object>> usermap = jdbcTemplate.queryForList("select * from tb_User_Info where (username = ? or phone = ?) and isDelete = 0", orderInfo1.getDistribId(), orderInfo1.getDistribId());
if (!usermap.isEmpty()) {
orderInfo1.setJson(new JSONObject().fluentPut("area2", usermap.get(0).get("AREA2")));
}
}
for (TbOrderInfo orderInfo1 : page.getItems()) {
List<Map<String, Object>> usermap = jdbcTemplate.queryForList("select * from tb_User_Info where (username = ? or phone = ?) and isDelete = 0", orderInfo1.getDistribId(), orderInfo1.getDistribId());
if (!usermap.isEmpty()) {
orderInfo1.setJson(new JSONObject().fluentPut("level", usermap.get(0).get("level")));
}
}
```
在上述修改后的代码中,我们使用 `jdbcTemplate.queryForList` 方法执行 SQL 查询,并将结果存储在 `List<Map<String, Object>>` 中。注意,我们使用 `?` 占位符来代替参数值,并在方法调用中传递参数值。这样可以保证查询语句的安全性,并避免 SQL 注入攻击的风险。