2016-06-09 41 views
-1

我的目標是創建一個類來表示java中的分類層次模式。現在從數據庫我得到我需要建立像下面的路徑;上述什麼是從java中的線性樹結構創建嵌套列表的方法

「123_456_789」 「123_67」 「895_444」

提到2個字符串作爲輸入而獲得。我的目標是上述數據轉換成以下結構

categories[ 
    { 
    categoryId:123, 
     subcategories[{ 
      categoryId:456, 
       subcategories[{ 
        categoryId:789 
        }] 
      }, 
      { 
       categoryId:67 
      } 
     ] 
    }, 
    { 
    categoryId:895, 
     subcategories[{ 
      categoryId:444 
      }] 
    }] 

什麼是將輸入轉化爲像categoryIds的列表類的Java對象最簡單的方法。

回答

0

您首先需要將其存儲在樹型數據結構中,然後按照json漂亮打印的方式進行打印。

您需要GSON罐子在classpath中,你可以找到它: gson.jar

這裏是你問的問題,該工作代碼:

import java.util.*; 
import java.util.Map.Entry; 
import com.google.gson.*; 

public class MainTest { 
public static void main(String[] args) { 
    String arr[] = new String[] { "123_456_789", "123_67", "895_444" }; 
    Node node = new Node(null, arr); 
    // System.out.println(node); 
    Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
    JsonParser jp = new JsonParser(); 
    JsonElement je = jp.parse(node.toString()); 
    String prettyJsonString = gson.toJson(je); 
    System.out.println(prettyJsonString.replaceAll("\"", "")); 
} 

static class Node { 
    String value; 
    List<Node> list; 

    public Node(String value, String arr[]) { 
     this.value = value; 
     list = new ArrayList<Node>(); 
     if (arr != null && arr.length > 0) { 
      Map<String, List<String>> map = new LinkedHashMap<String, List<String>>(); 
      for (String str : arr) { 
       int _ = str.indexOf("_"); 
       if (_ > 0) { 
        String key = str.substring(0, _); 
        String currentValue = str.substring(_ + 1); 
        List<String> list = map.get(key); 
        if (list == null) { 
         list = new ArrayList<String>(); 
        } 
        list.add(currentValue); 
        map.put(key, list); 
       } else { 
        map.put(str, null); 
       } 
      } 
      for (Entry<String, List<String>> entry : map.entrySet()) { 
       if (entry.getValue() == null) { 
        list.add(new Node(entry.getKey(), null)); 
       } else { 
        list.add(new Node(entry.getKey(), entry.getValue() 
          .toArray(new String[entry.getValue().size()]))); 
       } 
      } 
     } 

    } 

    @Override 
    public String toString() { 
     if (this.value == null) { 
      StringBuilder sb = new StringBuilder(); 
      sb.append("{\"categories\":[" + "\n"); 
      Iterator<Node> iter = list.iterator(); 
      while (iter.hasNext()) { 
       sb.append(iter.next()); 
       if (iter.hasNext()) { 
        sb.append(","); 
       } 
      } 
      sb.append("]}"); 
      return sb.toString(); 

     } else { 
      StringBuilder sb = new StringBuilder(); 
      Iterator<Node> iter = list.iterator(); 

      sb.append("{\"categoryId\":" + value + "}" 
        + (iter.hasNext() ? "," : "") + "\n"); 
      if (iter.hasNext()) { 
       sb.append("{\"subcategories\":[" + "\n"); 
       while (iter.hasNext()) { 
        // sb.append("{"); 
        sb.append(iter.next()); 
        // sb.append("}"); 
        if (iter.hasNext()) { 
         sb.append(","); 
        } 
       } 
       sb.append("]}" + "\n"); 
      } 
      return sb.toString(); 
     } 
    } 
} 
}