我有一个包含10个项目的数组列表。我想按参数对这些项目进行排序,但我不确定如何。
数组列表中我的项目的签名是:
Creature(String n, Terrain startTerrain, boolean flying, boolean magic, boolean charge, boolean ranged, int combat)
所以基本上我想让我的数组列表排序,所以它是魔法为真的生物,它们是第一个,然后是范围是第一个的生物,它们出现在列表的下一个,然后是其他一切。
我只使用冒泡排序,我不知道如何实现这一点。任何提示?
答案 0 :(得分:2)
最简单的方法是创建自己的实现Comparator<Creature>
的类,比如CreatureComparator
。其compare
method将定义您想要的Creature
的顺序。
比较其订单的两个参数。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
然后你可以拨打Collections.sort(yourArrayList, new CreatureComparator());
。
要一次按多个属性排序,请先测试第一个排序条件。即如果左侧的magic
为true
,但右侧的magic
为false
,则返回-1
,以便所有神奇的生物都在此之前非魔法生物。如果那是倒退,请返回1
。仅当magic
字段相同时才开始比较二级和三级(以及任何其他)排序条件。因此,如果magic
字段相同,请稍后测试ranged
,等等。只有当您的所有排序条件相同时,才会返回0
(等效)。