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

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

0

Mapのvalue部分にリストを入れるには

javaを学び始めて間もない未熟者ですが、どうしてもわからないことがあるので教えていただきたいです。

題名の通りなのですが、Mapのvalue部分にリストを入れるにはどうしたらよいでしょうか?

自分では以下のような感じで書いたのですが、
これだと、当然GAME_HARD(key)に対して複数のGAME_SOFT(value)
が存在する場合、全くおかしいことに気づきました。
なので、これをうまく解決する方法、つまりvalueにリストを入れるような
記述方法をどなたかご教授願いたいです。
初歩的な質問ですみません。。

public Map selectGameSoft {

    // SQL
    String sql = "SELECT DISTINCT "
                + "GAME_HARD,"
                + "GAME_SOFT "
                + "FROM GAMETABLE";
    // SQL発行
    ResultSet resultSet = executeQuery();
  
    Map map = new HashMap();

    try {
        while (resultSet.next()) {
            String key = resultSet.getString("GAME_HARD");
            String value = resultset.getString("GAME_SOFT");
            map.put(key, value);
        }
    }
    catch (SQLException a)
        throw new RuntimeException(a);
    }
    finally {
        closeResultSet(resultSet);
        close();
    }
    returun map;
}
        

10

回答

30396

閲覧

10件の回答

評価

0

電卓なんですが、
何処を変えたらできますか?

    public static void main(String[] args){
        int i1,num=0;
        String op = null;
        for(int i=0;i<args.length;i++){
            
            if(op==null){
                i1=Integer.parseInt(args[i]);
                num=i1;
            }
            
            else if(op.equals("+")){
                num= num+=Integer.parseInt(args[i]);
            }
            
            else if(op.equals("-")){
                num= num-=Integer.parseInt(args[i]);
            }
            
            else if(op.equals("*")){
                num= num*=Integer.parseInt(args[i]);
            }
            
            else if(op.equals("/")){
                num= num/=Integer.parseInt(args[i]);
            }
            
            op = args[i];
        
        }
        System.out.println(num);
    }

評価

0

何か全然関係ないレスが。。
書くとこ間違えたのかな?

引き続き、題名の質問に回答していただける方いましたらすみませんが、よろしくお願いします。

評価

0

Mapクラス自体のputに渡す引数はObject型なので
どんなものでも渡せる。
つまり今、String型のvalueをListのクラスなどに変えればよい。
一番標準的なListとして使われるのはArrayListかな。

評価

0

普通に
ArrayListをvalueにputするだけよ。

評価

0

回答ありがとうございます。
なるほど、そのままlistをvalueに突っ込めるんですね!

ちなみに、
現在、下記のように記述していますが、
この部分は駄目なので、うまくループさせて、GAME_HARDをkeyにputして、GAME_HARDに対応するGAME_SOFTをリストに突っ込んで、さらにそのリストをvalueに入れていく、スマートな方法があれば教えて頂きたいです。

SQLは最初の書き込みでに記述したようなものを想定しており、
SQLの結果が例えば(PS3,FF13)、(PS3,龍が如く)
、(XBOX360,BIO HAZARD5)、(XBOX360,DOA4)のように
返ってきた場合、keyにはPS3とXBO360をputし、PS3に対応するvalueとしてFF13と龍が如くのリスト、XBOX360に対応するvalueとして、BIOHAZARD5のリストをそれぞれputとたいのです。

長文になってしまいましたが、何か有効な手段があればお願いします。

while (resultSet.next()) {
            String key = resultSet.getString("GAME_HARD");
            String value = resultset.getString("GAME_SOFT");
            map.put(key, value);

評価

0

すみません、誰か回答願います。
スキルアップしたいのです。

評価

0

だから、何人もの人が、
valueにListを放り込めばいいって書いてるじゃん。

評価

60

// 具体的にはこう
import java.util.*;
public class HashBag1 {
    public static void main(String[] args) {
        HashMap<String, ArrayList<String>> hashBag = new HashMap<String, ArrayList<String>>();
        HashBag_add(hashBag, "A", "AAA");
        HashBag_add(hashBag, "A", "ABC");
        HashBag_add(hashBag, "B", "BBC");
        HashBag_add(hashBag, "C", "CCT");
        
        System.out.println(hashBag);
    }
    
    public static void HashBag_add(HashMap<String, ArrayList<String>> hashBag, String key, String value) {
        ArrayList<String> valueList = hashBag.get(key);
        if (valueList == null) {
            valueList = new ArrayList<String>();
        }
        valueList.add(value);
        hashBag.put(key, valueList);
    }
}

評価

0

>> Kvさん

ありがとうございます。
なるほど、キーにマップされている値がなければ新たにリストを作成してvalueをリストに突っ込み、キーにマップされている値があれば、リストに加えていくんですね。

HashMapの性質上、キーがかぶると上書きされてしまうので、どう解決しようかと思っていましたが、Kvさんのとてもスマートな回答を見て目から鱗でした。

これにて、解決です。ありがとうございました!

評価

0

hashBag.put(key, valueList);
は、if節に入れちゃえばいいよね。

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