0

私は、コンストラクターが を取り、文字列の長さと文字列を保持する値をList<String>持つハッシュマップを返すクラスを作成しています。つまり、文字列の長さを文字列のリストにマップしようとしています。これが私のコードです。key(Integer)arrayList<String>

public class Solver {
   Map<Integer,ArrayList<String>> inventoryMap;

    //constructor
    public Solver(List<String> list){
    inventoryMap=new HashMap<Integer,ArrayList<String>>();
    for (String s : list) {
         int x = s.length();
         if (inventoryMap.containsKey(x)){
            inventoryMap.put(x,inventoryMap.get(x).add(s));
         } else {
            newlist=new ArrayList<String>();
            newlist.add(s);
            inventoryMap.put(x,newlist);
         }
      }
   }

このコードをコンパイルすると、次のエラーが発生します

Solver.java:12: put(java.lang.Integer,java.util.ArrayList<java.lang.String>) in java.util.Map<java.lang.Integer,java.util.ArrayList<java.lang.String>> cannot be applied to (int,boolean)
            inventoryMap.put(x,inventoryMap.get(x).add(s));

どのマップに追加String elementsするのが間違っていると思いますか?私が間違っている可能性があることを教えてもらえますか?my ArrayList<String>value

4

6 に答える 6

2
if (inventoryMap.containsKey(x)) {
     inventoryMap.put(x,inventoryMap.get(x).add(s));
} 

これを変更します

if (inventoryMap.containsKey(x)) {
    inventoryMap.get(x).add(s);
} 

理由はinventoryMap.get(x).add(s)ブール値を返すため、リストの代わりにブール値を入れることはできません。

マップにはすでにリストが含まれているため、リストに要素を追加すると、マップにエントリを配置する必要はありません。マップからリストを取得し、要素を追加するだけです。

于 2013-07-19T03:40:36.667 に答える
1

inventoryMap.get(x).add(s) はブール値を返し、それをマップに入れようとしました。これが例外の原因です。リストをマップに配置すると、問題が解決します。

于 2013-07-19T03:37:55.683 に答える
0

コード inventoryMap.get(x).add(s) は値をリストに追加し、ブール値を返します。したがって、次のようなものが必要です。

List<String> list =inventoryMap.get(x);
list.add(s);
于 2013-07-19T03:38:35.993 に答える
0

を返すinventoryMap.put(x,inventoryMap.get(x).add(s))ので、メソッド呼び出しをチェーンすることはできません。実際のところ、ステートメントさえ必要ありません。をing していないので、その参照は にとどまり、への更新が表示されます。addbooleanputremoveListMapList

必要なのはinventoryMap.get(x).add(s).

于 2013-07-19T03:38:39.867 に答える
0

まず、要素が正常に追加されたかどうかをinventoryMap.get(x).add(s)返します。booleanSo は type と互換性がありませんArrayList<String>。あなたは簡単に行うことができます

inventoryMap.get(x).add(s)

pur() 関数を明示的に呼び出す必要はありません。

第二int x = s.length();に、する必要がありますInteger x = s.length();。Integer が期待される場所に int を置くことができます (とにかくジェネリックでは int を使用できません)。

于 2013-07-19T03:40:01.920 に答える
0

この行の問題点

        inventoryMap.put(x,inventoryMap.get(x).add(s));

これはinventoryMap.get(x).add(s)a を返し、booleanmap はここで a を期待しListます。このステートメントを分解する必要があります。このようなもの:

List<String> stirngsList = inventoryMap.get(x);
stirngsList.add(s);
于 2013-07-19T03:40:21.607 に答える