2016-06-09 10 views
-1

Mein Ziel ist es, eine Klasse zu erstellen, um das hierarchische Muster der Kategorie in Java zu repräsentieren. Jetzt von der Datenbank bekomme ich den Pfad, den ich wie unten konstruieren muss;Was ist der Ansatz zum Erstellen einer verschachtelten Liste aus einer linearen Baumstruktur in Java

"123_456_789" "123_67" "895_444"

die oben erwähnte 2-Strings als Eingabe erhält. Mein Ziel ist es, die oben genannten Daten in auf unter Struktur

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

zu konvertieren Was ist der einfachste Weg ist, um die Eingabe zu einem Java-Objekt wie die Klasse mit der Liste CategoryIDs zu konvertieren.

Antwort

0

Zuerst müssen Sie es in einer Baumstruktur speichern und dann so drucken wie json pretty print.

Sie müssen Gson Glas in Classpath und man es finden kann: gson.jar

Hier ist der Arbeits Code für Ihre gestellte Frage:

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(); 
     } 
    } 
} 
} 
Verwandte Themen