2013-01-17 35 views
1

我有一個SWT樹,我已經從2d數組列表中填充,但它不是非常正確。我試圖按項目編號對頂部樹項目進行分組,並且我沒有使用我的算法。我附上了一張圖片來解釋更好一點。項目4324226出現了兩次不同的子項目,並且我想將兩個子項都歸入一個父項目。SWT樹人口

enter image description here

這裏是我的樹代碼。有任何想法嗎?我忽略了一些簡單的東西嗎?

long[][] listOrders; 
    listOrders = database.getUnfinishedOrders(); 


    for (int i=0; i<listOrders.length; i++) { 
     TreeItem iItem = new TreeItem (tree, 0); 
     iItem.setText (Long.toString(listOrders[i][0])); 
     for (int j=1; j<listOrders[i].length; j++) { 
      TreeItem jItem = new TreeItem (iItem, 0); 
      jItem.setText (Long.toString(listOrders[i][j])); 
     } 
    } 
+0

照片沒有加載。 –

+0

在我的羅馬上工作正常嗎?所有它真的顯示,但是有兩個不同的「4324226」實例擴展與他們下面的不同數字。我試圖將他們歸入一個4324226 – john

回答

1

正在關注@Michal Borek這裏的建議是在Map<Long, Set<Long>>數據結構中對父代和子代進行分組的代碼。它假定每一個家長,反覆兒童應該只包含一次(否則只是ListLinkedHashSet通過ArrayList更換Set):

private Map<Long, Set<Long>> buildModel(long[][] originalModel) { 
    final Map<Long, Set<Long>> model = new LinkedHashMap<Long, Set<Long>>(); 
    for (int i = 0; i < originalModel.length; i++) { 
     model.put(originalModel[i][0], new LinkedHashSet<Long>()); 
    } 

    for (int i = 0; i < originalModel.length; i++) { 
     final Long key = originalModel[i][0]; 
     for (int j = 1; j < originalModel[i].length; j++) { 
      model.get(key).add(originalModel[i][j]); 
     } 
    } 

    return model; 
} 

這是如何建立的SWT樹:

long[][] listOrders = database.getUnfinishedOrders(); 
final Map<Long, Set<Long>> ordersModel = buildModel(listOrders); 

for (Map.Entry<Long, Set<Long>> entry : ordersModel.entrySet()) { 
    TreeItem iItem = new TreeItem (tree, 0); 
    iItem.setText(entry.getKey().toString()); 
    for (Long child : entry.getValue()) { 
     TreeItem jItem = new TreeItem (iItem, 0); 
     jItem.setText (child.toString()); 
    } 
} 
2

我建議先創建一個模型(如此分組),然後在您執行此操作後將其添加到樹中。

從設計的角度來看,這會好很多。因爲查看內容與數據內容分離。

您可以使用地圖來存儲特定順序的元素列表。