如何使用 keySet() 检索 HashMap 中的一组键,遍历它并找到每个键的计数?
How to use keySet() to retrieve a set of keys within a HashMap, loop over it and find its count for each key?
我的任务即将结束,我被指示要做的最后一件事是:
- 使用 keySet() 检索键集(映射的字符串部分)。遍历这个集合并打印出单词及其计数。
我已经使用 keySet() 方法打印出我的 HashMap 中的键数,但我还没有做的是找到 HashMap 中每个单词的长度,然后打印出其中的字符数每个字。我目前不确定我应该怎么做。我假设我会使用一些时间的 for 循环来遍历我已经完成的 keySet(),然后使用类似 .length() 的方法来找出每个单词的长度,然后以某种方式打印出来?
到目前为止,这是我的相关代码:
主要class
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 class
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 次,all 将计为 3 次,at 将计为 2 次等等。关于如何实现这个有什么想法吗?
您可能遗漏的部分是:您可以使用 键 然后访问您的地图值,如下所示:
Map<String, Integer> whateverMap = ... coming from somewhere
for (String key : whateverMap.keySet()) {
Integer countFromMap = whateverMap.get(key);
System.out.println("Key: " + key + " has " + countFromMap + " counter");
上面的例子只是为了让你继续,我没有 运行 通过编译器。
我的观点是:有多种方法可以迭代存储在 Map 中的元素。您可以使用 entrySet() 来检索 Entry 对象;或者您迭代键,并使用每个键查找值。
您可以使用来自 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));
收集函数的第二个参数是一个累加器。您正在从键集中积累字符串的 hasmap,它的长度为
我的任务即将结束,我被指示要做的最后一件事是:
- 使用 keySet() 检索键集(映射的字符串部分)。遍历这个集合并打印出单词及其计数。
我已经使用 keySet() 方法打印出我的 HashMap 中的键数,但我还没有做的是找到 HashMap 中每个单词的长度,然后打印出其中的字符数每个字。我目前不确定我应该怎么做。我假设我会使用一些时间的 for 循环来遍历我已经完成的 keySet(),然后使用类似 .length() 的方法来找出每个单词的长度,然后以某种方式打印出来?
到目前为止,这是我的相关代码:
主要class
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 class
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 次,all 将计为 3 次,at 将计为 2 次等等。关于如何实现这个有什么想法吗?
您可能遗漏的部分是:您可以使用 键 然后访问您的地图值,如下所示:
Map<String, Integer> whateverMap = ... coming from somewhere
for (String key : whateverMap.keySet()) {
Integer countFromMap = whateverMap.get(key);
System.out.println("Key: " + key + " has " + countFromMap + " counter");
上面的例子只是为了让你继续,我没有 运行 通过编译器。
我的观点是:有多种方法可以迭代存储在 Map 中的元素。您可以使用 entrySet() 来检索 Entry 对象;或者您迭代键,并使用每个键查找值。
您可以使用来自 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));
收集函数的第二个参数是一个累加器。您正在从键集中积累字符串的 hasmap,它的长度为