2012-04-19 19 views
0

私はは、文字列、文字列配列マップ

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] 
を次のようにデータを格納するようなマップを作成したい今アンドロイドにsqliteのからデータを取得していますにフェッチされたデータを変換します

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

答えて

4

私はMap<String, List<String>>(別名「マルチマップ」)を作成します。 List<String>を使用する場合は、指定するURLの電話番号の数を知る必要はありません。あなたが配列ルートを選ぶなら、そうではありません。

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にマップする必要があります。しかし、あなたが投稿したコードからそのアイデアを見るべきです。

+0

名前フィールドも保存したい場合はどうすればいいですか?名前URL [電話1、電話2]? – Hunt