0

私は次のようにAndroidのsqliteからデータをフェッチしています

  URL                     PHONE
---------------------------------
/test/img1.png          98989898
/test/img1.png          61216121
/test/img2.png          75757575
/test/img2.png          40404040
/test/img3.png          36363636

今、私は次のようにデータを保存するようなマップを作成したいと思います

   /test/img1.png          [98989898 , 61216121 ]
   /test/img2.png          [75757575 , 40404040 ]
   /test/img3.png          [36363636]

マップ全体を関数に渡すことができるように、最終的にバックグラウンドで関数が画像のURLを取得し、電話番号にリストされている配列にデータを送信します。では、フェッチしたデータをキーから文字列配列スタイルに変換するにはどうすればよいですか?

4

1 に答える 1

4

Map<String, List<String>>(別名「マルチマップ」)を作成します。を使用する場合は、開始する前に、特定のURLの電話番号を知る必要はありませんList<String>。アレイルートを選択した場合はそうではありません。

Map<String, List<String>> results = new HashMap<String, List<String>>();
while (rs.next()) {
    String url = rs.getString(1);
    String phone = rs.getString(2);
    List<String> phones = (results.contains(url) ? results.get(url) : new ArrayList<String>());
    phones.add(phone);
    results.put(url, phones);
}

Googleコレクションには、箱から出してすぐに使用できるマルチマップがありますが、これで十分であることに同意していただけると思います。

より多くのアイテム(名前など)を保存する場合は、それらすべてを1つのまとまりのあるものにカプセル化するオブジェクトについて考え始める必要があります。Javaはオブジェクト指向言語です。あなたは低すぎるレベルで考えていることに罪を犯しているように聞こえます。文字列、プリミティブ、およびデータ構造は、オブジェクトの構成要素です。おそらくここに人が必要です:

package model;

public class Person {
    private String name;
    private Map<String, List<String>> contacts;

    // need constructors and other methods.  This one is key
    public void addPhone(String url, String phone) {
        List<String> phones = (this.contacts.contains(url) ? this.contacts.get(url) : new ArrayList<String>());
        phones.add(phone);
        this.contacts.put(url, phones);
    }
}

残りはあなたにお任せします。

このようにすると、結果セットをPersonにマップする必要があります。しかし、あなたは私が投稿したコードからアイデアを見るはずです。

于 2012-04-19T11:05:32.630 に答える