簡體   English   中英

將 3 個不同的值從數據庫放入 Hashmaps

[英]put 3 different values from database to Hashmaps

在我的數據庫中,我有 3 列: Date(PrimaryKey, TEXT)FlightNumber(PrimaryKey, INTEGER)LoadEstimate(INTEGER) 我想做的是將數據庫中的所有值放入 hashmap。 我必須確保所有數據類型都正確才能將它們加載到其中,並且希望通過用戶輸入(日期和航班號)過濾LoadEstimate數據,然后返回LoadEstimate的預測數字,如果沒有返回-1 .

這是我的數據庫:

在此處輸入圖像描述

文本

將您的日期和航班號組合成一個字符串。 也許在它們之間包含一個分隔符,以便於人類閱讀和機器解析。

該組合文本是 map 的關鍵。 integer 的負載因子數是您對 map 的值。

Map< String , Integer > map = new HashMap<>() ; 

使用JDBC訪問數據庫。 循環傳入的數據庫數據。 對於每個數據庫行,將這兩個字段組合起來,並使用第三個字段輸入 map。

String k = localDate.toString() + "F" + flightNumber ;
Integer v = loadFactor ;
map.put( k , v ) ;

取回。 如果 map 未找到值, getOrDefault方法將返回默認值。 你說你想要一個 -1 作為默認值。

Integer loadFactor = map.getOrDefault( k , Integer.valueOf( -1 ) ;

Object

或者,您可以創建一個 class 來保存日期和航班號。

Java 16 中的新記錄功能非常適合此功能。 編譯器隱式創建構造函數、getter、 equals & hashCodetoString 請注意,您可以在使用它的代碼塊中本地定義您的記錄。

對於較舊的 Java,寫入常規的 class 而不是記錄。

record DateFlight ( LocalDate localDate , Integer flightNumber ) {}

將您的 map 定義為:

Map< DateFlight , Integer > map = new HashMap<>() ; 

並調用put

DateFlight k = new DateFlight( localDate , flightNumber ) ;
Integer v = loadFactor ;
map.put( k , v ) ;

選擇Map

您有多種Map實現可供選擇,與 Java 捆綁在一起。 第三方也提供實現。

我可能會從HashMap開始加載數據。 然后使用Map.copyOf在 ZD52387880E2138177A 和更高版本中使用 Map.copyOf 制作未指定 class 的不可修改的 map。

Map< DateFlight , Integer > dataLoad = new HashMap<>() ; 
… load data
Map< DateFlight , Integer > map = Map.copyOf( dataLoad ) ; // Make unmodifiable `Map`. 

這是我制作的一張圖表,作為捆綁地圖的指南。

在此處輸入圖像描述

不會強迫您創建一種新的 Object 來存儲行信息的最簡單的解決方案是:

Hashmap 包含鍵值對並將每個唯一鍵映射到一個值。

根據 SQL 數據庫信息,您提供的表具有復合主鍵,換句話說,您的主鍵由兩列(TEXT 類型的日期和 INTEGER 類型的航班號)組成。

如您所知,主鍵具有唯一值,以幫助您在查詢表中的數據時進行區分。 因此,您應該在 hashmap 中存儲表的主鍵作為鍵。

現在,由於您的主鍵由兩列組成,並且它們的值的組合可以幫助您識別唯一性,因此您可以創建一個數組或列表並將日期和 * flightNumber * 存儲在那里。 然后,您將將此數組/列表作為鍵添加到 hashmap 中,並將所需字段的 rest(在我們的示例中為 INTEGER 類型的 loadEstimate)作為其值。

上面的代碼應該是這樣的:

HashMap<ArrayList<Object>, int> myMap = new HashMap<>(); //Create your hashmap

while (rs.next()) {
    LocalDate  date = LocalDate.parse(rs.getString("Date"));
    int  flightnumber = Integer.parseInt(rs.getString("FlightNumber"));
    int loadestimate = Integer.parseInt(rs.getString("LoadEstimate"));

    //Create array resembling the primary key
    ArrayList<Object> mapKey = new ArrayList<>();
    mapKey.add(date);
    mapKey.add(new Integer(flightnumber));

   //Store to Map the key and the value
   myMap.put(mapKey, loadestimate);
}
//then do sth with the hashmap

請注意,我創建了一個類型為 Object 的通用對象數組,以便能夠存儲不同類型的對象。 這是可能的,因為它們都是 class Object 的子類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM