gpt4 book ai didi

java - 返回作为 HashMap 中的值的 ArrayList 的大小

转载 作者:行者123 更新时间:2023-12-02 06:06:01 26 4
gpt4 key购买 nike

我正在开发一个电子邮件客户端的垃圾邮件过滤器项目。

public MailServer()
{
mailMap = new HashMap<String,ArrayList<MailItem>>();
}

我被指示使用 HashMap 来存储收件人,并使用 ArrayList 来保存他们的邮件项目。下一个方法是计算并返回特定收件人的邮件项目。

public int howManyMailItems(String who)
{
int count = 0;
for(MailItem item : mailMap) {
if(item.getTo().equals(who)) {
count++;
}
}
return count;
}
<小时/>

编辑

我正在 BlueJ 中工作,当我尝试编译该类时,它会在第 4 行突出显示 mailMap 并显示

"for-each loop not appicable"

 public int howManyMailItems(String who)
{
int count = 0;
for(MailItem item : mailMap.keySet()) {
if(item.getTo().equals(who)) {
count++;
}
}
return count;
}

当我尝试使用 keySet 时,它显示类型不兼容。

最佳答案

一个Map没有实现Iterable界面。这就是为什么您会收到“for-each 循环不适用”错误的原因。您可以选择迭代 map 的

  • entrySet() — 一个Set<Map.Entry<K,V>> (其中 K 是键类型,V 是映射的值类型);
  • keySet() — 一个Set<K> ;或
  • values() — 一个Collection<V> .

一般来说,您会想做这样的事情:

public int howManyMailItems(String who)
{
int count = 0;
for(Map.Entry<String,ArrayList<MailItem>> entry : mailMap.entrySet()) {
String key = entry.getKey();
ArrayList<MailItem> array = entry.getValue();
// process key and array value
}
return count;
}

很难准确说出您使用什么逻辑进行计数。如果您只需要数组(并且忽略 map 的键),那么您可以使用:

public int howManyMailItems(String who)
{
int count = 0;
for(ArrayList<MailItem> array : mailMap.values()) {
for (MailItem item : array) {
if (item.getTo().equals(who)) {
count++;
}
}
}
return count;
}

附注使用接口(interface)而不是具体类型来声明泛型参数类型通常被认为是良好的做法。例如,您的 map 可以声明为:

Map<String, List<MailItem>>

而不是

Map<String, ArrayList<MailItem>>

(您必须相应地修改迭代循环中使用的类型。)您仍然可以放置 ArrayList 的实例。到 map 中,但您也可以改变主意并放入其他类型的 List 。 (例如,您可以将调用 Collections.unmodifiableList(...) 产生的不可修改列表放入其中。)

关于java - 返回作为 HashMap 中的值的 ArrayList 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22287227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com