Постановка задачи: я пытаюсь отсортировать составной класс, используя сопоставимые и collection.sort, но получаю исключение.
class BmetData implements Comparable<BmetData>{ Long mId;
String mName;
String mPath;
String frequency;
List<MValue> mValues;
public int compareTo(BmetData o) {
return mId.compareTo(o.mId);
}}
Подкласс -
class MValue implements Comparable<MValue> { Date startTimeInMillis;
Long current;
Long min;
Long max;
Long count;
Long sum;
Long value;
public int compareTo(MValue o) {
return startTimeInMillis.compareTo(o.startTimeInMillis);
}}
Я получаю список ответов BmetData из API, обрабатываю строку ответа API, используя метод -
public static <T> List<T> getJavaListFromJson(ApiResponseHolder apiResponse, Class<T> clazz) {
if (apiResponse.getResponseCode() == 200) {
Gson gson = new Gson();
TypeToken<List<T>> token = new TypeToken<List<T>>() {
};
List<T> pojoList = gson.fromJson(apiResponse.getMessage(), token.getType());
return pojoList;
} else {
return null;
}
}
, который возвращает меня List<BmetData> list
Теперь пытаемся отсортировать его с помощью Collections.sort (list), получая исключение -
Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
at java.util.Arrays.sort(Arrays.java:1312)
at java.util.Arrays.sort(Arrays.java:1506)
at java.util.ArrayList.sort(ArrayList.java:1462)
at java.util.Collections.sort(Collections.java:141)
at Helper.ApiExecuterUsingToken.main(ApiExecuterUsingToken.java:70)