9

ArrayList<NameValuePair>名前で値を取得するのは正しい方法ですか?

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

ArrayList<NameValuePair>または、名前で値にアクセスするためのショートカットはありますか?

4

5 に答える 5

10

いいえ-「キー」でアクセスするように設計されていないリストとしてそれらを保存しています-キーの概念はありません。

Map<String, String>キーごとに 1 つの値を格納するだけでよいと仮定すると、次のようなものが本当に必要なように思えます。

に行き詰まっている場合ArrayList(そして、少なくともパラメーターの型を に変更したいのですが、それが必要なList場合はそれで十分Iterableです)、あなたが持っているものは問題ありません。

于 2013-06-05T12:20:05.187 に答える
9

Map代わりにa を使用できる場合、次のように機能します。

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");

を使用するとHashMap、キーはリストとして保存されないため、これは高速になり、関数を使用してコンテナーを反復処理する必要がなくなります。

その後、 と を使用してすべての値にアクセスできます。ドキュメントmyMap.keySet()myMap.values()参照してください。

于 2013-06-05T12:29:12.457 に答える
1

キーまたは名前が整数の場合は、SparseArray代わりに a を使用することをお勧めします: http://developer.android.com/reference/android/util/SparseArray.html

次に、さまざまな関数を使用して、配列内のキー、値、またはインデックスを使用して必要な値を取得できます。

于 2013-06-05T12:26:24.833 に答える
0

に渡す必要がありArrayList<NameValuePair>ますMap<String, String>

Java 8 ストリームの使用:

private String getValueByKey(ArrayList<NameValuePair> _list, String key) {
    return _list.stream().collect(Collectors.toMap(NameValuePair::getName, NameValuePair::getValue)).get(key);
}

ただし、コードの効率を高めるには、リストをマップにまとめて、そのマップで作業する方がよいでしょう。関数 getValueByKey は必要ありません。

Map<String, String> nvpMap = _list.stream().collect(Collectors.toMap(NameValuePair::getName, NameValuePair::getValue));
String value = nvpMap.get(key);

お役に立てれば!!!

于 2019-11-18T18:15:04.570 に答える