Я бы сделал это так: сначала определите набор списков, которые определяют порядок для каждого поля:
private static List<String> statusOrder = Arrays.asList("open", "working", "close");
private static List<String> nameOrder = Arrays.asList("toto", "titi");
private static List<String> firstNameOrder = Arrays.asList("tutu", "tata");
Затем используйте List.indexOf
, чтобы получить позицию элемента в списке, а затем просто вычтите результаты:
@Override
public int compareTo(MyClass o) {
final int statusComp = statusOrder.indexOf(status) - statusOrder.indexOf(o.status);
if (statusComp != 0) return statusComp;
final int nameComp = nameOrder.indexOf(name) - nameOrder.indexOf(o.name);
if (nameComp != 0) return nameComp;
return firstNameOrder.indexOf(firstName) - firstNameOrder.indexOf(o.firstName);
}
Проблема этого подхода в том, что indexOf
вернет -1, если элемент отсутствует в списке. Вам нужно будет определить поведение в случае, когда MyClass
содержит нестандартные значения (возможно, это никогда не произойдет).