2017-09-14 140 views
0

我有一些數據的數組,需要創建一個對象圖。我不知道如何通過數組來循環和創建/鏈接對象。 這裏是examle:如何從數組創建對象圖

Array 
a1 b1 c1 
a1 b1 c2 
a1 b2 c3 

在結束我應該有ID爲A1的被攝體A,其包含兩個對象B(id爲b1和b2)的列表和那些包含3個對象C(B1包含的列表中c1和c2和b2包含c3)

example for the classes: 
class A{ 
string id; 
List<B> bs; 
} 
class B{ 
Sting id; 
List<C> cs; 
} 
class C{ 
String id; 
} 
+0

你所談論的編寫解析器 – ControlAltDel

+0

爲什麼解析器?從數組我知道每列代表一個特定的對象(列1 = A,列2 = B ...)。所以最後我需要一個HashMap來存儲關於id的信息。如果id a1不在hashMap中 - >創建新的對象A等等。我的問題是,林不知道熱,迭代和鏈接對象 – Mitzu

+0

ControlAltDel它不是解析他正在掙扎與如何在解析後建立關係。這是一個公平的問題。 – SpacePrez

回答

0

創建一些POJO類或元組來保存值。

分割基於所述分離器(空間)將字符串

循環遍歷字符串標記陣列和將值插入對象,並創建基於名稱它們之間的關係。

如果只有3個元素可以硬編碼,它會很容易。如果有一個可變數字,那麼你需要變得更聰明,並有一個數組或一組POJO /節點,這樣你就可以根據名字檢索一個。

下面是一些僞代碼,以幫助

String[] tokens = str.split(' '); 
Set<node> nodes = new HashMap<String, node>(); 
while(has more tokens in tokens){ 
String s = tokens.next(); 
if(nodes.get(s) == null){ 
Node n = new node(); 
nodes.add(s, n); 
} 
else{ 
Node n = nodes.get(s); 
} 
n.name = s; 
String s2 = tokens.next(); 
Node n2 = nodes.get( s2); // retrieve node based on name 
if(n2 == null){ 
    Node n2 = new node(); 
    n2.name = s2; 
    nodes.add(s2, n2); 
} 
n.left = n2; 
// do same thing for the other child 

您可以用數組或集或按照自己的喜好去做。 E:不要創建3個類。那很糟。沒有理由3個對象不應該有相同的類。你需要一個通用的通用節點類,它可以滿足他們所有的目的,所以它是一個很好的OOP來導航節點樹。從對方獲取不同的類類型A,B,C是不好的,並且會使代碼中的對象非常痛苦。

你想要的是一個單獨的「節點」類,然後是3個不同的實例。

節點a,節點b,節點c;

這樣他們就可以全部相互鏈接了。

Class Node 

Node left; 
Node right; 

Public Node(){} 

就是這樣。如果你願意,你可以用get/set方法封裝左右節點。

(忽略此,如果由於某種瘋狂的原因你必須告訴你用A,B和C類的分配)