【问题标题】:Frequency of object atribute value in ArrayListArrayList中对象属性值的频率
【发布时间】:2016-05-06 08:51:02
【问题描述】:

这是我的清单:

List < Game > players = new ArrayList < > ();

例如,我需要找到一种方法来计算 ArrayList 中有多少对象包含等于“Dan”的名称。

我在 for 循环中尝试过,但不起作用:

Collections.frequency(players.get( i ).name, "Dan")

【问题讨论】:

  • 为什么Game 的列表称为players
  • Collections.frequency 的第一个参数应该是Collection。它使用equals方法来比较相同类型的对象。
  • @shmosel 因为我的类名为 Game 而我的文件名为 Game.java :) 我知道我不应该这样命名它。但是我现在正在学习 java 几个月,所以由于我是 java 新手,所以名称是 Game )) 之后我会更改它。

标签: java oop arraylist


【解决方案1】:

你不应该这样做,但如果你真的想使用Collections.frequency,你需要在你的Game类中实现equals方法:

@Override
public boolean equals(Object o)
{
    if(o == null || !(o instanceof Player)) return false;
    Player p = (Player) o;
    return name.equals(p.getName());
}

然后你可以调用它:

Game dan = new Game("dan");
Collections.frequency(players, dan);

(也许你的游戏类应该命名为Player

【讨论】:

  • @shmosel 是的,但它有助于 OP 了解它是如何工作的。你的答案就是要走的路。
  • OP 可能没有意识到这种方法的问题。我会添加一个免责声明。
  • 另外,在上下文中它应该是Game dan = new Game("dan");,等等......或者你应该告诉OP为什么他的设计是错误的。
【解决方案2】:

Java 8 解决方案:

int count = players.stream()
        .filter(p -> p.name.equals("Dan"))
        .count();

Java 7 解决方案:

int count = 0;
for (Game player : players) {
    if (player.name.equals("Dan")) {
        count++;
    }
}

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多