Java 在集合上迭代<;对象>;

Java 在集合上迭代<;对象>;,java,collections,java-stream,Java,Collections,Java Stream,我有以下收藏 它由两个相同的类实现 一队和二队 public class TeamOne implements Player { private String username; private int health; private int armor; private boolean isAlive; private Gun gun; protected TeamOne(String username, int health, int ar

我有以下
收藏

它由两个相同的类实现

一队和二队

public class TeamOne implements Player {

    private String username;
    private int health;
    private int armor;
    private boolean isAlive;
    private Gun gun;

    protected TeamOne(String username, int health, int armor, Gun gun) {
        this.setUsername(username);
        this.setHealth(health);
        this.setArmor(armor);
        this.setGun(gun);
 }
然后从集合中创建两个列表teamOne和List teamTwo

List<Player> teamOne = players.stream().filter(p instanceof TeamOne).collect(Collectors.toList());
List<Player> teamTwo = players.stream().filter(p instanceof TeamTwo).collect(Collectors.toList());
List teamOne=players.stream().filter(teamOne的p instanceof.collect(Collectors.toList());
List teamTwo=players.stream().filter(teamTwo的p instanceof.collect(Collectors.toList());
有没有办法从这两个列表中创建流并创建以下函数,因为我们不知道它们的大小可能不相等

teamOne.member.takeDamage(teamTwo.member.getGun.fire())

我试着做这个

BiConsumer<List<Player>, Player> action = (f, s) -> {

            f.stream().filter(Player::isAlive).forEach(p -> p.takeDamage(s.getGun().fire()));



        };


  while (teamOne.stream().anyMatch(Player::isAlive) && teamTwo.stream().anyMatch(Player::isAlive)) {

teamOne.stream().filter(Player::isAlive).forEach(t -> action.accept(teamTwo, t));
teamTwo.stream().filter(Player::isAlive).forEach(t -> action.accept(teamOne, t));
}
BiConsumer动作=(f,s)->{
f、 stream().filter(Player::isAlive).forEach(p->p.takeDamage(s.getGun().fire());
};
while(teamOne.stream().anyMatch(Player::isAlive)和&teamTwo.stream().anyMatch(Player::isAlive)){
teamOne.stream().filter(Player::isAlive.forEach(t->action.accept(teamTwo,t));
teamTwo.stream().filter(Player::isAlive.forEach(t->action.accept(teamOne,t));
}
但我认为我的方法是错误的,在这种情况下,我会进行更多的迭代


对于teamOne/teamOne的每个成员,我想我会迭代整个teamOne/teamOne。

假设您只遵循@suggestion的一个玩家类和玩家团队的一个字段,那么构建团队就变成了:

    List<Player> teamOne = players.stream()
            .filter(p -> p.getTeamNumber() == 1)
            .collect(Collectors.toList());

我更喜欢嵌套的
循环。

使用
TeamOne
TeamTwo
类可能不是一个好主意。考虑有一个场而不是一个球员在哪个队。我已经考虑过了,但最后我仍然有同样的问题,当他们需要互相对抗的时候,我希望每个队的2名队员都能在球队中向每个活着的队员开火。1@LouisWasserman的建议本身并不能解决你所问的问题,同意吗,但它将防止许多其他问题。因此,请牢记这一点,为了您自己,也为了那些在您之后阅读或维护您的代码的人。感谢您的输入,这是我为学习Java而创建的一些任务,但我一直坚持这个解决方案,这就是为什么我在这里发布这个问题,现在我将研究一下@LouisWasserman的建议,也许我会想办法弄明白:)
    List<Player> teamOne = players.stream()
            .filter(p -> p.getTeamNumber() == 1)
            .collect(Collectors.toList());
    teamTwo.stream()
            .filter(Player::isAlive)
            .forEach(p2 -> teamOne.stream()
                    .filter(Player::isAlive)
                    .forEach(p1 -> p1.takeDamage(p2.getGun().fire())));