2016-04-26 9 views
0

ich ziehe von PHP zu Java. und ich versuche, etwas wie unten in Java zu erreichen:Gibt es eine Möglichkeit, sowohl Zeichenfolge als auch Array in einzelne HashMap zu setzen?

$user = array(
      "firstname" => "myname", 
      "lastname" => "surname", 
      "phone" => array(
         "home" => "123213213213", 
         "office" => "312321321312312", 
         "mobile" => "4532134213131312" 
         ) 
     ) 

gibt es eine Möglichkeit, so in Java zu tun?

Danke!

+2

das möglich ist, und was ist der Zweck? Das Beispiel, das Sie gezeigt haben, funktioniert besser mit Datensatz, der Person mit definierten Feldern beschreibt, um Vorname, Nachname und eine Sammlung von Objekten zu speichern, die Telefon (Nummer + Typ) beschreiben. – user486075

+1

Es ist möglich, aber normalerweise eine schreckliche Idee. Sie schreiben besser tatsächliche Klassen mit stark typisierten Feldern. –

+0

versuchte gerade, Daten von XML zu erhalten und es in mehrdimensionalem Array zu setzen. so kann ich zu stechen umwandeln und speichere oder bekomme leicht später db. – krozero

Antwort

2

Es gibt nur wenige Möglichkeiten, um es näher zu machen, aber nichts so bequem wie das.

Beispiel 1:

Map<String, Object> user = new HashMap<String, Object>() { 
      { 
       put("firstname", "myname"); 
       put("lastname", "surname"); 
       put("phone", new HashMap<String, String>() { 
        { 
         put("home", "123213213213"); 
         put("office", "312321321312312"); 
         put("mobile", "4532134213131312"); 
        } 
       }); 
      } 
     }; 

aktualisieren Beispiel:

((Map)user.get("phone")).put("mobile2", "123"); 

Hinzufügen eines weiteren Karte:

user.put("address", new HashMap<String, Object>()); 

(vielleicht durch Verwendung von putIfAbsent Verfahren verbessert werden könnte, oder Merge-Methoden)

Druck aktuellen Inhalt:

System.out.println(user); 

Gibt:

{firstname=myname, address={}, phone={mobile2=123, mobile=4532134213131312, office=312321321312312, home=123213213213}, lastname=surname} 
+0

lässt sagen, ich möchte "mobile2" in "Telefon" schieben. wie kann ich das machen? danke! – krozero

+0

((Map ) user.get ("phone")). Put ("mobile2", "123") –

+0

ich habe versucht, eine weitere hashmap hinzuzufügen und dynamisch zu setzen. aber habe "java.lang.NullPointerException" user.put ("Adresse", neue HashMap ()). Ist das ein falscher Weg? – krozero

1

Sie können die JSON-API in Java verwenden, um ein Objekt im gewünschten Format zu erstellen. Hier ist die Dokumentation der JSON API

http://www.oracle.com/technetwork/articles/java/json-1973242.html

Beispiel:

String stringToParse = "{" + 
    "firstname: \"myname\"," + 
    "lastname: \"surname\"," + 
    "phone: [ " + 
     " { home: \"123213213213\" }, " + 
     " { office: \"312321321312312\" }," + 
     " { mobile: \"4532134213131312\" }" + 
    "]" + 
"}"; 

JSONParser parser = new JSONParser(); 
JSONObject json = (JSONObject) parser.parse(stringToParse); 
0

Es ist „möglich“ aber ich glaube nicht, dass es eine gute Konvention sein (es sei denn, eine andere Art, wie ich bin nicht bewusst) . Ich glaube, dass dies funktionieren würde:

HashMap<String, Object> hm = new HashMap<String, Object>(); 

Ich würde denken, dass Sie eine Liste Objekttyp verwenden müssten anstelle eines Array-Datentyp für eine HashMap. Wenn ich dies tun würde, würde ich wahrscheinlich meine eigene Klasse erstellen, die diese Situation behandelt.

1

Zum Beispiel Sie den folgenden Code verwenden:

Map<String, Object> map = new HashMap<>(); 
    map.put("firstname", "myname"); 

    Map<String, String> phones = new HashMap<>(); 
    phones.put("home" , "123213213213"); 
    phones.put("office" , "312321321312312"); 
    phones.put("mobile" , "4532134213131312"); 
    map.put("phones", phones); 
Verwandte Themen