【问题标题】:how to get frequency of Object's field in ArrayList如何在ArrayList中获取对象字段的频率
【发布时间】:2017-04-28 01:24:35
【问题描述】:

我尝试使用此代码打印列表中名称“约翰”的频率(人类有 2 个字段:姓名和年龄):

package test;
import data.Boy;
import data.Human;
import java.util.*;
import java.lang.*;
class Test
{
public static void main(String[] args)
{
    Scanner sc = new Scanner(System.in);
    List<Human> menu = new ArrayList();
       menu.add(new Human("John",20));
       menu.add(new Human("Smith",19));
       menu.add(new Human("Alice",12));
       menu.add(new Human("John",18));
       System.out.println(Collections.frequency(menu, menu.get(0).getName());

}
}

但值是 0 而不是 2。这段代码有什么问题?

【问题讨论】:

    标签: java arraylist


    【解决方案1】:
    如果您想计算特定Human 对象 在列表中出现的次数,

    Collections#frequency 将是合适的。但是您想检查具有特定名称的人的数量,而不管该名称是否可能出现在多个对象中。流在这里派上用场:

    List<Human> matches = menu.stream()
                              .filter(h -> h.getName().equals(menu.get(0).getName()))
                              .collect(Collectors.toList());
    
    int size = matches == null ? 0 : matches.size();
    System.out.println("There are " + size + " humans which match.");
    

    【讨论】:

    • 感谢您的支持
    【解决方案2】:

    嗯,menu 包含 Human 对象,而不是字符串,这可能是 getName() 返回的内容。因此,Collections.frequency() 将检查 menu 是否包含“John”,但它不包含 - 它包含一个名为“John”的 Human

    【讨论】:

    • 哦,我看到你的评论了。
    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多