我有一个数组列表,就像这样:
List<String[]> myList = new ArrayList<String[]>();
myList.add( new String[]{"A1","B1","C1","D1","values"} );
myList.add( new String[]{"A1","B1","C2","D1","values"} );
myList.add( new String[]{"A1","B1","C2","D2","values"} );
myList.add( new String[]{"A2","B1","C1","D1","values"} );
myList.add( new String[]{"A2","B1","C1","D2","values"} );
我需要填充一个与父亲有依赖关系的对象,所以:
您认为哪种结构更好?我需要名字A1,B1等。
我有探测地图,数组,列表...我认为算法是不可能的...... :( :(
编辑解释:
我有一个DataSet的ResultSet,它有5个或6个GROUP BY子句。我有所有的简单数据和
我需要使用Text Objects创建一个结构,例如:
Person A - Building 1 - Tower 1 - Some Text A
Person A - Building 1 - Tower 2 - Another Text
Person A - Building 2 - Tower 1 - Another one Text
Person A - Building 2 - Tower 3 - My Text
Person B - Building 1 - Tower 2 - Any Text
Person B - Building 3 - Tower 1 - A Text...
我需要这个数据的Object结构......有可能吗?
答案 0 :(得分:3)
我知道了!哦,我的上帝! :D:D:D:D:D:D:D ......
private static void finalFillerTotalSuperSpecial(List<String[]> initialList, HashMap<String,Object> mapa){
String[] currentElement = null;
String currentKey = null;
String[] nextElement = null;
String nextKey = null;
int i=0,start,end;
while (i < initialList.size()) {
start = i;
currentElement = initialList.get( i++ );
currentKey = currentElement[0];
if (i<initialList.size()){
nextElement = initialList.get( i );
nextKey = nextElement[0];
}
HashMap<String,Object> insideMap = new HashMap<String,Object>();
mapa.put(currentKey, insideMap);
while (currentKey.equals(nextKey) && i < initialList.size()) {
currentElement = initialList.get( i++ );
currentKey = currentElement[0];
if (i<initialList.size()){
nextElement = initialList.get( i );
nextKey = nextElement[0];
}
}
end = i;
List<String[]> listOfCurrentElements = new ArrayList<String[]>();
for (int j=start;j<end;j++)
listOfCurrentElements.add( getNextArray(initialList.get(j)) );
if ( listOfCurrentElements.get(0).length>1 )
finalFillerTotalSuperSpecial(listOfCurrentElements,insideMap);
else
insideMap.put(listOfCurrentElements.get(0)[0], null);
}
}
答案 1 :(得分:2)
当然有可能。 :)
我认为您所描述的内容可以通过通用或 n -ary树来解决。这是一棵树,每个节点可以有任意数量的子节点。我wrote在Java中做了这件事。
如果您不想构建树,可以使用Map<String, Set<String>>
构建。这并不能让您轻松访问树操作,但它应该保持关系:
Map<String, Set<String>> myNodes = new LinkedHashMap<String, Set<String>>();
for(String[] myArray : myList) {
String previousNode = null;
for(String node : myArray) {
if(myNodes.get(node) == null) {
myNodes.put(node, new HashSet<String>());
}
if(previousNode != null) {
myNodes.get(previousNode).add(node);
}
previousNode = node;
}
}
所以你基本上得到了(我正在使用JSON来演示):
{
A1: ["B1"],
A2: ["B1"],
B1: ["C1", "C2"],
C1: ["D1"],
C2: ["D1", "D2"],
D1: ["values"],
D2: ["values"]
}
然而,这比树更难以遍历。
答案 2 :(得分:1)
因此,您希望根据树的列表特定表示来构建树结构。
对于任何树结构,其节点可以有0到 n 子节点,因此子节点可以简单地存储在List
(或者可选地,Map
中,如果你想快速查找名称)。对于此任务,似乎不需要存储父引用。
然后你只需要遍历myList
。对于每个数组元素,