如何对两个对象数组列表排序?

时间:2019-01-12 12:51:25

标签: java sorting object arraylist

在游戏前,我需要对速度属性和玩家对象的速度属性两个对象数组列表(Room.enemies)进行排序,这样我才能知道我需要按哪种顺序运行攻击方法。

例如,在room.enemies数组中,我有一个地精(速度10),蜘蛛(速度8),地精(速度10),而玩家的速度为12,我想先对玩家执行攻击敌人,然后然后执行三遍Attackplayer方法(地精,地精,地精)。

import java.util.Random;

public class Battle {
    private boolean attackPlayer(Player player, Enemy enemy) {
        int edamage = 0;
        int eamplifier = enemy.getDamage() - player.getDefense();
        Random dice = new Random();
        for (int i=1; i < enemy.getAgility(); i++) {
            edamage += dice.nextInt(10) + eamplifier;
        }
        if (edamage < 0) {
            edamage = 0;
        }
        return player.takeDamage(edamage);
    }

    private boolean attackEnemy(Player player, Enemy enemy) {
        int damage = 0;
        int amplifier = player.getDamage() - enemy.getDefense();
        Random dice = new Random();
        for (int i=1; i < player.getAgility(); i++) {
            damage += dice.nextInt(10) + amplifier;
        }
        if (damage < 0) {
            damage = 0;
        }
        return enemy.takeDamage(damage);
    }

    private void gameturn(Player player, Room room) {

    }
}

1 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8或更高版本(希望如此)。 您可以将便利比较器与Stream API一起使用。

类似以下内容:

ArrayList<String> list = new ArrayList(....);
list.sort(Comparator.comparing(Enemy::getSpeed)
          .thenComparing(Enemy::someOtherProperty)); 

或者仅使用Stream API:

List<String> sortedBySpeed = list.stream()
                .sorted(Comparator.comparing(Enemy::getSpeed))
                .collect(Collectors.toList());

您将看到敌人sortedBySpeed排序的列表。