2011-03-22 68 views
1

我试图检查特定值的集合检查集合中的值

即我想检查位置类型=攻击者的玩家集合。只要至少有一个参考,人们如何引用并不重要。

将尽力至今让我失望。

任何想法?

在此先感谢!

回答

5
public Player findFirstAttacker(Collection<Player> players) { 
    for (Player p : players) { 
    if (p.getPositionType() == Player.POSITION_ATTACKER) { 
     return p; 
    } 
    } 

    return null; 
} 
+0

+1:这很可能更接近达明什么比希望我的回答。它也可以通过分别返回“true”和“false”而不是“p”和“null”来转换为布尔测试(对我来说,这就是“检查”所暗示的)。 – 2011-03-22 16:01:36

3

你试过Collection.contains()方法吗?

如果是这样,这是返回错误的答案,检查的equals()hashCode()类上的播放器的实现是适当的。这些方法将(可能)用于检查集合内容是否等于您传递的对象,因此如果它们保留为从Object继承的默认实现,则可能无法获得您期望的行为。

0
public Player getFirstAttacker(Collection<Player> playerCollection) { 

for (Player player : playerCollection) { 
    if (player.getPosition() == Position.attacker) { 
    return player; 
    } 
} 

return null; 
} 
2

guava有:

boolean hasAttackers = Iterables.any(list, new Predicate<Player>() { 
    public boolean apply(Player player) { 
     return player.getPosition().equals(PositionType.ATTACKER); 
    } 
}); 
+0

这是更好的答案,因为它的工作原理是位置是一个字符串(而不是原始类型或枚举类型)。 – 2011-03-22 17:55:58