使用 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搞定。
程式碼如下:
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class HashMapUtil {
public static void main(String[] args) {
HashMapUtil.testHashMap("camera01,camera02,camera03");
}
public static void testHashMap(String cameraStrList) {
String[] splitCameraList = cameraStrList.split(",");
HashMap<String, Object> hashMap = new HashMap<>();
//add and delete faster than arrayList when using linkList
LinkedList<Object> linkedList = new LinkedList<>();
for(String splitCamera : splitCameraList) {
hashMap.put("cameraId", splitCamera);
hashMap.put("createBy","tjt");
hashMap.put("startTime", new Date().toLocaleString());
linkedList.add(hashMap);
hashMap = new HashMap<>();
}
HashMap<Object, Object> paramMap = new HashMap<>();
paramMap.put("camera_id_list", linkedList);
paramMap.put("callback", "http://www.baidu.com");
log.info("linkedList: "+linkedList);
log.info("paramMap: "+paramMap);
}
}
執行結果:
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值;
程式碼如下:
package com.xinyan.springcloud.controller;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.TreeMap;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TreeMapUtil {
public static void main(String[] args) {
TreeMapUtil.testTreeMap("camera01,camera02,camera03");
}
@SuppressWarnings({ "unchecked", "deprecation" })
public static void testTreeMap(String cameraStrList) {
String[] splitCameraList = cameraStrList.split(",");
LinkedList<Object> linkedList = new LinkedList<>();
@SuppressWarnings({ "unchecked", "unused", "rawtypes" })
TreeMap treeMap = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return 100;
}
});
for(String splitCamera : splitCameraList) {
treeMap.put("cameraId", splitCamera);
}
linkedList.add(treeMap);
HashMap<Object, Object> paramMap = new HashMap<>();
paramMap.put("camera_id_list", linkedList);
paramMap.put("callback", "http://www.baidu.com");
log.info("linkedList: "+linkedList);
log.info("paramMap: "+paramMap);
}
}
執行結果:
linkedList: [{cameraId=camera01, cameraId=camera02, cameraId=camera03}]
paramMap: {camera_id_list=[{cameraId=camera01, cameraId=camera02, cameraId=camera03}], callback=http://www.baidu.com}