我使用mapDB來存儲我的數據,這些數據插入到地圖中。我遵循mapDB-Site上的說明,並能夠設置數據庫並填寫值。但是我的問題就在這裏,我將數據插入到地圖中,然後調用數據庫類將地圖插入到數據庫中。當前地圖,然後添加到數據庫,而是自動覆蓋以前的條目,使條目的數量總是1Java:使用mapDB,寫入數據庫覆蓋以前的條目
這裏是我的代碼:
for(Element objects : objectInstanceList)
{
mapID = objects.getName().toString();
List<Element> listObjects1 = objects.getChildren();
Multimap<String, Values> mm = HashMultimap.create();
for(Element objectClasses : listObjects1)
{
List<Element> listObjects2 = objectClasses.getChildren();
for(Element objectAttributes : listObjects2)
{
String name = objectAttributes.getAttributeValue("name");
String type = objectAttributes.getAttributeValue("type");
String value = objectAttributes.getAttributeValue("value");
Values v = new Values(name, type, value);
mm.put(objectClasses.getName(), v);
}
}
DataBase.putHW(mapID, mm);
System.out.println(mm);
}
就像我說我填的是Multimap之mm,並且有一些值和Method Database.putHW,它看起來像這樣(在mapDB頁面的例子中創建)。
public class DataBase {
static DB dbHW = DBMaker.newMemoryDB().make();
static NavigableSet<Fun.Tuple2<String, Multimap<String,Values>>> multimapHW
= dbHW.getTreeSet("Applications");
public static void putHW(String mapID, Multimap<String,Values> dbMap) {
multimapHW = dbHW.createTreeSet("Delta").serializer(BTreeKeySerializer.TUPLE2).make();
multimapHW.add(Fun.t2(mapID, dbMap)); // Fun means functional, its the Function to add values in the map
}
}
那麼爲什麼數據庫中的multimapHW只包含1個條目而不是多個條目呢?
感謝您的回答。數據類型值包含3個字符串。它代表了Object的某個屬性。問題是,它不符合java.lang.comparable,因此我不能將它添加到Tuple中。 Multimap for Values的數據結構對我來說看起來不錯,我只需要一個數據庫來保存它們。猜測我的數據結構有1個鍵(對象的名稱)和一個包含所有屬性的Map不適合mapDB。我對這個假設是否正確? – Alika87