不同業務場景使用不同的map
System.out.println("Map當Key一樣,後面的value會覆蓋前面的value");
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 2);
map.put(1, 3);
System.out.println(map.get(1)); // 3
System.out.println(map.keySet()); //[1]
System.out.println(map.containsValue(2)); //false
System.out.println(map.containsKey(1)); //true
System.out.println("------------------------------");
System.out.println("MultiValueMap 當Key一樣,value不一樣,不會覆蓋");
MultiValueMap map2 = new MultiValueMap();
map2.put(1, 2);
map2.put(1, 3);
System.out.println(map2.get(1)); // [2,3]
System.out.println(map2.keySet()); //[1]
System.out.println(map2.containsValue(2)); //true
System.out.println(map2.containsKey(1)); //true
該程式是一個單執行緒時間排程程式。
用途:每臺機器需要定時執行的程式。比如: 更新本地快取,更新索引檔案,定時資料分析計算,定時發郵件,旺旺等等。
說明:1,需要考慮定時執行的任務在設定時間內是否能順利完成,否則容易積壓任務。
2,需要考慮本地快取的資料結構的讀寫同步
private static Map configMap = new ConcurrentHashMap(20);
private ScheduledExecutorService scheduledExecutorService;
public void init() {
reloadCache();
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
// 每隔10分鐘自動更新一次
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
reloadCache();
}
}, 1, 10, TimeUnit.MINUTES);
}
private void reloadCache() {
// 需要定時排程的任務,比如: 可以更新本類的靜態MAP 等等。
}
將一個普通java物件轉換成Map. 一般我們會通過Class物件的getFields()來獲取所有屬性,然後通過遍歷所有屬性生成Getter的方法名,通過呼叫getDeclaredMethod()來獲取getter方法,然後invork()得到屬性值.
反射的效率很高,但是上述獲取getter方法的代價還是比較大.高效的話需要自己對Class的getter方法做cache.
用BeanInfo的方式獲取的話,jdk內部實現自動對做過呼叫的class做了快取,所以效率更好.
public static Map<String, Object> convertBean(Object bean,
Set<String> excludeProperties) throws IntrospectionException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
Class<?> type = bean.getClass();
Map<String, Object> objMap = new HashMap<String, Object>();
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String propertyName = propertyDescriptor.getName();
if (!"class".equals(propertyName)) {
Method readMethod = propertyDescriptor.getReadMethod();
Object result = readMethod.invoke(bean, new Object[0]);
objMap.put(propertyName, result != null
&& result.getClass().isEnum() ? result.toString()
: result);
}
}
return objMap;
}
相關文章
- 影片直播原始碼,不同業務場景需選擇不同方案去快取資料原始碼快取
- Map的使用場景
- 面對不同的業務場景,選擇零碼還是低碼?
- 電話機器人在不同的行業有不同的應用場景和不同的效果機器人行業
- insert的不同場景效能比較
- 不同場景下 MySQL 的遷移方案MySql
- 表單請求 統一欄位不同場景不同處理
- [原]不同場景下MySQL的遷移方案MySql
- 如何根據不同業務場景調節 HPA 擴縮容靈敏度
- & 號和管道符號(|)在不同場景下的使用方法符號
- 巧用列舉來處理UI中顯示值與業務值不同的場景UI
- Redis 中 set 和 hset 有什麼不同,各自使用場景Redis
- [譯] Java 資料流的不同應用場景Java
- 基於角色的訪問控制並根據不同的場景顯示不同的反饋資訊
- 推送開發實戰:APP如何實現跟隨使用者不同場景,實現不同的內容推薦APP
- Spring Boot應用中如何動態指定資料庫,實現不同使用者不同資料庫的場景Spring Boot資料庫
- 解鎖「SOAR」在不同場景下的應用與實踐
- 針對不同場景的Python合併多個Excel方法PythonExcel
- 一文搞懂,這幾種 API 的不同應用場景API
- 【譯】Object與Map的異同及使用場景Object
- 不同資料夾使用不同的Git使用者Git
- 直播影片美顏SDK在不同場景下的表現效果分析
- 青雲QingCloud 在不同場景化中的雲端計算應用GCCloud
- 不同應用場景的10個Linux面試問題與解答Linux面試
- 業務流程場景
- 不同使用者,不同的session超時時間Session
- 企業微信(聯絡我)功能如何在不同場景獲客
- 乾貨:不同場景容器內獲取客戶端源IP的方法客戶端
- 什麼業務場景適合使用Redis?Redis
- [程式碼結構設計]根據不同條件使用不同實現類的業務程式碼設計
- VSFTP針對不同的使用者限制不同的速度FTP
- Java集合類: Set、List、Map、Queue使用場景梳理Java
- 不同使用者,不同表空間遷移
- RFID電子標籤根據應用場景的不同如何選型?
- 不同型別代理適用的業務是什麼?型別
- 【exp/imp不同版本】Oracle不同版本的exp/imp使用注意事項Oracle
- 對不同角色使用者設定不同的系統首頁
- “百變”Redis帶你見識不同場景下的產品技術架構Redis架構