Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ArrayListにMapの値を格納させたい

前方一致でキーを検索し、見つかったらArrayListにそのキーが保持している値(名前(キー),年齢,電話番号など・・・)を格納させようと思っています。

ArrayListにMapの値を格納するのは無理な話でしょうか?

以下ソースコードです。
public List<String> containsKey(Map<String, String> map , String prefix){
        
        List<String> keyList = new ArrayList<String>();
        
        for(String key : map.keySet()){
        
            if(key.startsWith(prefix)){

        /*↓格納できてません。key(キーが入ります)が持つ値を格納させたいです*/
                keyList.addAll(SuperPersons.personMap.get(key));

            }

        }
        
        return keyList; 
        
    }

9

回答

7247

閲覧

9件の回答

評価

0

ミス見つけたので自己レス&修正です;

×keyList.addAll(SuperPersons.personMap.get(key));
○keyList.addAll(map.get(key));
こちらで見てくださいすいません;

評価

0

なんでaddAll()で入れようとしてるの?
目的のMapは<String,String>でしょ?つーことはvalueはStringじゃん。

ところで、keySet()取ってget()するのは効率悪いから、entrySet()使うといいよ。

評価

0

StringかString[]にしないとArrayListに格納できないんですね・・・。
ArrayListのリストはMapできるので逆もあるのだと思っていました。

>entrySet()
指摘ありがとうございます。

評価

0

ArrayListに格納できないんじゃなくて、addAll()の引数の型が違うんじゃないかってことなんだけど。

つか、 List<String> keyList で宣言してるんだからString[]は入らないでしょ。

評価

0

>addAll()の引数の型が違う
はい。先ほどの発言は「型が違うので合わせないと格納できないんですね」って意味だったのですが;意味が上手く伝わらず申し訳ないです。
String[]の方はこちらのミスでした。指摘ありがとうございます。

最終的にArrayListにキーの持つ値を格納するのではなくキーだけをArrayListに格納し、戻り先でget(key)で値を求めることで解決しました。
助言と指摘ありがとうございましたm(__)m

評価

0

結局何をしたかったのか分からん…。

評価

0

keyList.add(インデックス,map.get(key).toString);
でいけるような気がするのは私だけか??
別にキーで返しても良いと思うけどさ…
あと言わしてもらうとインターフェースをあまり使うのはどうかと思う。
アクセス性には富むと思うが堅牢なアプリを組むなら実装クラスにすべき。
MapとList共にね。

public ArrayList<String> containsKey(HashMap<String, String> map , String prefix){
        
        ArrayList<String> keyList = new ArrayList<String>();

まぁHashMap使ってるんかは知らないけど、
出来る限りこうすべき。
なぜジェネリックが出てきたのかも少しは
理解できると思う。

評価

0

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320182538

コレの続き。

評価

0

>アクセス性には富むと思うが堅牢なアプリを組むなら実装クラスにすべき。
あんまり聞かない話だな。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。