计算差异winRatio
,如果是0
,在名返回的差异,例如...
public class MultiComparator implements Comparator<Player> {
@Override
public int compare(Player o1, Player o2) {
int result = (int) (o1.getWinRatio() - o2.getWinRatio());
if (result == 0) {
result = o1.getUserName().compareTo(o2.getUserName());
}
return result;
}
}
而且因为我没有什么去,我用这个
public interface Player {
public String getUserName();
public long getWinRatio();
}
作为基础对象
另一个(奇怪的)想法可能是创建一个“链接”Comparator
,允许您将两个(或更多)Comparator
和它们连起来,这样当任何一个Comparator
结果是0
,它会不断尝试比较值在列表中的Comparator
...
public class RatioComparator implements Comparator<Player> {
@Override
public int compare(Player o1, Player o2) {
return (int) (o1.getWinRatio() - o2.getWinRatio());
}
}
public class NameComparator implements Comparator<Player> {
@Override
public int compare(Player o1, Player o2) {
return o1.getUserName().compareTo(o2.getUserName());
}
}
public class ChainedComparator implements Comparator<Player> {
private Comparator<Player>[] comparators;
public ChainedComparator(Comparator<Player>... comparators) {
this.comparators = comparators;
}
@Override
public int compare(Player o1, Player o2) {
int result = -1;
for (Comparator<Player> proxy : comparators) {
result = proxy.compare(o1, o2);
if (result != 0) {
break;
}
}
return result;
}
}
,你可以使用类似。 ..
Collections.sort(list, new ChainedComparator(new RatioComparator(), new NameComparator()));
这是未经测试,只是一个粗略的想法;)
您可以在单一的比较一举两得的事情。只需在单个compareTo方法' –