2017-09-14 168 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类的分配)