Java:首先对特定字符串进行排序,然后按字母数字排序

时间:2017-11-27 18:29:05

标签: java sorting

我尝试按照以下方式排序:

MyPOJO:

String city;
String tokenA;
String tokenB;

城市是城市的名称。

tokenA只能是" ALARM"或" ALERT"

tokenB只能是" ALARM"或" ALERT"

  • MyPOJO" ALARM"在tokenA或tokenB中,或两者都必须先出现
  • MyPOJO" ALERT"在tokenA或tokenB中,或者两者都必须排在第二位
  • 最后所有城市应该来,排序字母数字

如果有几个MyPOJO有" ALARM"在tokenA和tokenB中,根据内部城市排序。

如果有几个MyPOJO有" ALERT"在tokenA和tokenB中,根据内部城市排序。

任何字段或两个字段中带有ALARM的MyPOJO必须始终在ALERT之前。

我有第一个tokenA,但我不知道如何最好地引入tokenB。

我的代码:

@Override
public int compareTo(Object other) {
    if (other == null) {
        throw new NullPointerException();
    }

    MyPOJO that = (MyPOJO) other;

    int token = tokenA.compareTo(that.tokenA);
    if (token != 0) {
        return token;
    }

    return city.compareTo(that.city);
}

1 个答案:

答案 0 :(得分:1)

这是您想要的方法。 在compareTo方法中执行此操作:

if tokenA == ALARM and other.tokenA != ALARM return -1
if tokenA != ALARM and other.tokenA == ALARM return 1
if tokenB == ALARM and other.tokenB != ALARM return -1
if tokenB != ALARM and other.tokenB == ALARM return 1
if tokenB == ALARM and other.tokenB == ALARM
  return city.compareTo(other.city)
if tokenA == ALERT and other.tokenA != ALERT return -1
if tokenA != ALERT and other.tokenA == ALERT return 1
if tokenB == ALERT and other.tokenB != ALERT return -1
if tokenB != ALERT and other.tokenB == ALERT return 1
if tokenB == ALERT and other.tokenB == ALERT 
  return city.compareTo(other.city)
return city.compareTo(other.city)