使用 hashMap和treeMap开启多个摄像头的监控任务
背景:今天有个需求,传入多个摄像头ID,然后调用接口,开启这些摄像头的监控任务。
方法一:
如果你的摄像头监控任务格式为:
{camera_id_list=[{createBy=tjt, cameraId=camera01, startTime=2019-1-10 22:58:19}, {createBy=tjt, cameraId=camera02, startTime=2019-1-10 22:58:19}], callback=http://www.baidu.com}
这种格式的话,那么可以用hashMap搞定。
代码如下:
1 import java.util.Date; 2 import java.util.HashMap; 3 import java.util.LinkedList; 4 5 import org.apache.commons.lang.time.DateFormatUtils; 6 7 import lombok.extern.slf4j.Slf4j; 8 9 @Slf4j 10 public class HashMapUtil { 11 12 public static void main(String[] args) { 13 HashMapUtil.testHashMap("camera01,camera02,camera03"); 14 } 15 16 public static void testHashMap(String cameraStrList) { 17 String[] splitCameraList = cameraStrList.split(","); 18 HashMap<String, Object> hashMap = new HashMap<>(); 19 //add and delete faster than arrayList when using linkList 20 LinkedList<Object> linkedList = new LinkedList<>(); 21 for(String splitCamera : splitCameraList) { 22 hashMap.put("cameraId", splitCamera); 23 hashMap.put("createBy","tjt"); 24 hashMap.put("startTime", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")); 25 linkedList.add(hashMap); 26 hashMap = new HashMap<>(); 27 } 28 HashMap<Object, Object> paramMap = new HashMap<>(); 29 paramMap.put("camera_id_list", linkedList); 30 paramMap.put("callback", "http://www.baidu.com"); 31 log.info("linkedList: "+linkedList); 32 log.info("paramMap: "+paramMap); 33 } 34 35 }
执行结果:
inkedList: [{createBy=tjt, cameraId=camera01, startTime=2019-1-10 22:58:19},{createBy=tjt, cameraId=camera02, startTime=2019-1-10 22:58:19}, {createBy=tjt, cameraId=camera03, startTime=2019-1-10 22:58:19}]
paramMap: {camera_id_list=[{createBy=tjt, cameraId=camera01, startTime=2019-1-10 22:58:19}, {createBy=tjt, cameraId=camera02, startTime=2019-1-10 22:58:19}, {createBy=tjt, cameraId=camera03, startTime=2019-1-10 22:58:19}], callback=http://www.baidu.com}
方法二:
如果你的摄像头监控任务格式为:
{camera_id_list=[{cameraId=camera01, cameraId=camera02, cameraId=camera03}], callback=http://www.baidu.com}
二叉树treeMap,当传入的两个key值一样,会返回结果0,则会覆盖掉之前的cameraId,返回结果:{camera_id_list=[{cameraId=camera03}], callback=http://www.baidu.com};
重写了treeMap中的比较方法,当比较结果返回值小于0,则排在二叉树的左边即集合倒序,当比较结果返回值大于0,则排在二叉树的右边亦不会覆盖之前的key值;
代码如下:
1 import java.util.Comparator; 2 import java.util.HashMap; 3 import java.util.LinkedList; 4 import java.util.TreeMap; 5 import lombok.extern.slf4j.Slf4j; 6 7 @Slf4j 8 public class TreeMapUtil { 9 10 public static void main(String[] args) { 11 TreeMapUtil.testTreeMap("camera01,camera02,camera03"); 12 } 13 14 @SuppressWarnings({ "unchecked", "deprecation" }) 15 public static void testTreeMap(String cameraStrList) { 16 String[] splitCameraList = cameraStrList.split(","); 17 LinkedList<Object> linkedList = new LinkedList<>(); 18 @SuppressWarnings({ "unchecked", "unused", "rawtypes" }) 19 TreeMap treeMap = new TreeMap(new Comparator() { 20 @Override 21 public int compare(Object o1, Object o2) { 22 return 0; 23 } 24 }); 25 for(String splitCamera : splitCameraList) { 26 treeMap.put("cameraId", splitCamera); 27 } 28 linkedList.add(treeMap); 29 HashMap<Object, Object> paramMap = new HashMap<>(); 30 paramMap.put("camera_id_list", linkedList); 31 paramMap.put("callback", "http://www.baidu.com"); 32 log.info("linkedList: "+linkedList); 33 log.info("paramMap: "+paramMap); 34 } 35 }
执行结果:
linkedList: [{cameraId=camera01, cameraId=camera02, cameraId=camera03}]
paramMap: {camera_id_list=[{cameraId=camera01, cameraId=camera02, cameraId=camera03}], callback=http://www.baidu.com}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?