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
2条答案
按热度按时间ovfsdjhp1#
文本
将日期和航班号组合为一个字符串。可能在它们之间包含一个分隔符,以便于人类阅读和机器解析。
组合文本是你绘制Map的关键。负载因子的整数是Map的值。
使用jdbc访问数据库。循环传入的数据库数据。对于每个数据库行,组合这两个字段,并将第三个字段输入Map。
检索。这个
getOrDefault
如果Map找不到值,则方法返回默认值。你说过你想要一个-1作为默认值。对象
或者,您可以创建一个类来保存日期和航班号。
Java16中的新记录特性非常适合这种情况。编译器隐式地创建构造函数getters,
equals
&hashCode
,和toString
. 请注意,可以在使用记录的代码块中本地定义记录。对于较旧的java,编写常规类而不是记录。
将Map定义为:
打电话给我
put
:选择Map
你有各种各样的
Map
可供选择的实现,与java捆绑在一起。第三方也提供实现。我可能会从一个
HashMap
加载数据。然后使用Map.copyOf
在Java9和更高版本中。这是我做的一个图形,作为捆绑Map的指南。
qmelpv7a2#
最简单的解决方案不会强迫您创建一种新的对象来存储行的信息,它是:
hashmap包含键值对,并将每个唯一键Map到一个值。
根据您提供的sql数据库信息,您的表有一个复合主键,换句话说,您的主键由两列组成(日期为text类型,航班号为integer类型)。
如您所知,主键具有唯一的值,以便在查询表中的数据时帮助您进行区分。因此,应该将表的主键作为键存储在hashmap中。
现在,由于主键由两列组成,并且它们的值的组合有助于识别唯一性,因此可以创建一个数组或列表,并将日期和flightnumber存储在其中。然后,将此数组/列表作为键添加到hashmap中,并将所需的其余字段(在本例中是integer类型的loadestimate)作为其值。
上面的代码应该是这样的:
注意,我创建了一个object类型的泛型对象数组,以便能够存储不同类型的对象。这是可能的,因为它们都是类对象的子类。