java - 如何对两个对象数组列表进行排序?

标签 java sorting object arraylist

在一个游戏中,我需要对速度属性上的对象数组列表(Room.enemies)和具有速度属性的玩家对象进行两种排序,以便我可以知道需要按什么顺序运行攻击方法。

例如,在 room.enemies 数组中,我有一个妖精(速度 10)蜘蛛(速度 8)妖精(速度 10),而玩家的速度为 12 我想首先从玩家处执行攻击敌人,然后然后执行 AttackPlayer 方法 3 次(妖精,妖精,妖精)。

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) {

    }
}

最佳答案

如果您使用的是 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

关于java - 如何对两个对象数组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159759/

相关文章:

javascript - 使用 lodash 或类似的库,如何按最接近的结果对集合进行排序?

作为对象的 JavaScript 词法环境

php - 将对象存储到数组中并在 PHP 中将所有具有相同值的数组分组

java - 何时创建新的 EntityManager

java - 阻止 install4j 通过命令行添加桌面快捷方式

javascript - 按 child 的 child 对数组进行排序

JavaScript - 对象创建与更新

java - 从 Google Cloud Storage Java API 下载比 gsutil 慢

java - Java如何从逗号分隔的String中获取元素

java - 数组排序并反转打印