1. 程式人生 > >使用 hashMap和treeMap開啟多個攝像頭的監控任務

使用 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}