微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从数组列表中创建树例如,ResultSet

如何解决从数组列表中创建树例如,ResultSet

|| 我有一个数组列表,如下所示:
List<String[]> myList = new ArrayList<String[]>();
myList.add( new String[]{\"A1\",\"B1\",\"C1\",\"D1\",\"values\"} );
myList.add( new String[]{\"A1\",\"C2\",\"D2\",\"values\"} );
myList.add( new String[]{\"A2\",\"values\"} );
我需要填充一个与父亲有依赖性的对象,因此: A1只有一个孩子B1。 B1有2个孩子,C1和C2。 C1有1个孩子D1,其值... C2有两个子D1和D2,它们的值... A2只有一个孩子,B1(与另一个孩子不同) B1只有一个孩子,C1 ...等。 您认为哪种结构更好?我需要名称A1,B1等。 我有关于Maps,Arrays,Lists的探针...我认为该算法是不可能的... :( :( 请帮忙! 编辑说明: 我有一个具有5个或6个GROUP BY子句的数据库中的ResultSet。我有所有简单的数据, 我需要使用文本对象构建一个结构,例如:
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...
我需要此数据的对象结构...可能吗?     

解决方法

我做的 !哦,我的上帝! :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);
     }



 }
    ,当然可以。 :) 我认为您所描述的内容可以通过通用树或n元树来解决。那是一棵树,其中每个节点可以具有任意数量的子代。我写了一些用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\"]
}
但是,这比一棵树更难遍历。     ,因此,您想从此列表的树的特定表示形式构建树结构。 对于任何树结构,它的节点可以有0到n个子节点,因此这些子节点可以琐碎地存储在
List
中(如果要快速查找名称,可以选择将其存储在
Map
中)。对于此任务,似乎不需要存储父引用。 然后,您只需要遍历
myList
。对于每个数组元素, 取现有树的根。 遍历数组。 对于数组中的每个字符串,请检查当前树节点是否有一个具有此名称的子节点。 如果不是,请创建它并将其添加到树中。 移到子节点(因此它成为当前节点)。 从数组中获取下一个字符串,然后从步骤3开始重复。 从列表中获取下一个数组,然后从步骤1开始重复。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。