5

私は任務の終わりに近づいています。私がするように指示された最後のことの 1 つは、次のことです。

  • keySet() を使用して、一連のキー (マッピングの文字列部分) を取得します。このセットをループして、単語とそのカウントを出力します。

keySet() メソッドを使用して HashMap 内のキーの数を出力しましたが、まだ行っていないのは、HashMap 内の各単語の長さを見つけて、各単語内の文字数を出力することです。これをどのように行うべきかについては、現在のところ確信が持てません。for ループの時間を使用して、既に行った keySet() を反復処理し、.length() メソッドのようなものを使用して各単語の長さを調べ、それを何らかの形で出力すると仮定していますか?

これまでのところ、関連するコードは次のとおりです。

メインクラス

package QuestionEditor;
import java.util.Set;
public class Main{
    public static void main (String[] args) {
        WordGroup secondWordGroup = new WordGroup ("When-you-play-play-hard-when-you-work-dont-play-at-all");


         Set<String> set = secondWordGroup.getWordCountsMap().keySet();

         System.out.println("set : " + set + "\n");

         for(String key : set)
         {
             System.out.println(key);
         }
        }
    }

WodGroup クラス

package QuestionEditor;
import java.util.HashMap;

public class WordGroup {

    String  word;

    // Creates constructor which stores a string value in variable "word" and converts this into lower case using
    // the lower case method.
    public WordGroup(String aString) {

        this.word = aString.toLowerCase();
    }

    public String[] getWordArray() {

        String[] wordArray = word.split("-");
        return wordArray;
    }

    public HashMap<String, Integer> getWordCountsMap() {

        HashMap<String, Integer> myHashMap = new HashMap<String, Integer>();

        for (String word : this.getWordArray()) {
            if (myHashMap.keySet().contains(word)) {
                myHashMap.put(word, myHashMap.get(word) + 1);
            } else {
                myHashMap.put(word, 1);
            }

        }

        return myHashMap;
    }   
}

これを行う方法についての助けは大歓迎です、ありがとう。

更新 したがって、コードがコンパイルされると、次の出力が得られます。

Key: play has 3 counter
Key: all has 1 counter
Key: at has 1 counter
Key: work has 1 counter
Key: hard has 1 counter
Key: when has 2 counter
Key: you has 2 counter
Key: dont has 1 counter

しかし、私が実際にやりたいことは、各単語内の文字数を出力することです。たとえば、play は 4 回カウントされ、すべてが 3 回カウントされ、at は 2 回カウントされます。これを実装する方法についてのアイデアはありますか?

4

2 に答える 2

2

Java 8 のストリーム API を使用して、Map<String,Integer>

Map<String, Integer> stringIntegerMap = set.stream().collect(HashMap::new,
    (hashMap, s) -> hashMap.put(s, s.length()), HashMap::putAll);

stringIntegerMap.forEach((key,value) ->System.out.println(key + " has length: "+key.length() + " and count: "+value));

関数を収集する 2 番目のパラメーターはアキュムレータです。キーセットから文字列のハスマップを蓄積しており、その長さ

于 2016-11-12T20:38:48.717 に答える