原始 Map:{/dev/vg00/lvol7=/dev/vg00, /dev/vg00/lvol6=/dev/vg00, ...},每個 Key 唯一。需轉換為 List<Map>,每個元素包含固定鍵 one、two、three,值分別為原 Key、原 Value、固定 IP。
import java.util.*;
public class MapTransform {
public static void main(String[] args) {
// 模擬原始數據
Map sourceMap = new HashMap<>();
sourceMap.put("/dev/vg00/lvol7", "/dev/vg00");
sourceMap.put("/dev/vg00/lvol6", "/dev/vg00");
sourceMap.put("/dev/vg00/lvol5", "/dev/vg00");
// ... 更多數據
// 目標列表
List
List
若需持久化到數據庫,有兩種主流方案:
CREATE TABLE device_volume (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
volume_path VARCHAR(255) NOT NULL, -- one
vg_name VARCHAR(255) NOT NULL, -- two
server_ip VARCHAR(45) NOT NULL, -- three
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
批量插入:
String sql = "INSERT INTO device_volume (volume_path, vg_name, server_ip) VALUES (?, ?, ?)";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
for (Map item : targetList) {
ps.setString(1, item.get("one"));
ps.setString(2, item.get("two"));
ps.setString(3, item.get("three"));
ps.addBatch();
}
ps.executeBatch();
}
CREATE TABLE device_snapshot (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
data JSON NOT NULL, -- 存儲整個 List
核心邏輯是 遍歷 entrySet → 構建新 Map → 加入 List。Java 8 Stream 寫法更簡潔。持久化時優先考慮關係表便於索引查詢,JSON 適用於非結構化或頻繁變更的場景。