2013-06-05 4 views
7

Ist es eine richtige Art und Weise ArrayList<NameValuePair> Wert durch seinen Namen zu bekommen?Get Arraylist <Namevaluepair> Wert von Namen

private String getValueByKey(ArrayList<NameValuePair> _list, String key) { 
    for(NameValuePair nvPair : _list) { 
     if(nvPair.getName().equals(key)) { 
      return nvPair.getValue().toString(); 
     } 
    } 
    return null; 
} 

Oder ist es eine Verknüpfung mit Namen ArrayList<NameValuePair> Wert zugreifen?

+1

Wäre das nicht ein HashMap mehr hier nützlich? Oder gibt es einen bestimmten Grund, eine ArrayList zu verwenden? – Humungus

+0

Wenn Sie "Schlüssel" sagen, meinen Sie "Name" aus dem Paar NameValue? –

+0

Ja, "Name" ist was ich meine. – Raptor

Antwort

9

Nein - Sie sie als eine Liste zu speichern, die nicht durch „Schlüssel“ zugegriffen werden soll - es ist nicht jede Vorstellung eines Schlüssels hat.

Es klingt wie Sie wirklich so etwas wie eine Map<String, String> wollen - vorausgesetzt, Sie nur einen einzigen Wert für jeden Schlüssel speichern müssen.

Wenn du mit dem ArrayList stecken (und ich zumindest würde den Parametertyp List ändern, wenn nicht Iterable gegeben, dass das ist alles, was Sie brauchen) dann, was du hast ist in Ordnung.

4

Es scheint, dass Sie eine andere Datenstruktur benötigen. Zum Beispiel Map<Name, Value> oder Map<Name, NameValuePair>, wenn Sie möchten.

Die erste Lösung ist wohl richtiger, die zweite einfacher zu implementieren ist, wenn Sie bereits einen Code, der die Tatsache nutzt, dass Paare in der Liste gespeichert sind. Map ermöglicht das Sammeln von Werten; Collection ist eine super Schnittstelle von List.

5

Wenn Sie einen Map stattdessen verwenden können, arbeiten sie wie folgt aus:

Map<String,String> myMap = new HashMap<>(); 
myMap.put("key1","value1"); 
myMap.put("key2","value2"); 
myMap.put("key3","value3"); 

String str = myMap.get("key1"); 
//equivalent to your 
String str = getValueByKey(myList,"key1"); 

Mit einem HashMap die Tasten sind nicht als eine Liste gespeichert, so dass dies schneller und Sie werden nicht verwenden müssen Funktion, um den Container zu iterieren. Sie können dann auf alle Werte mit myMap.keySet() und myMap.values() zugreifen, siehe documentation.