Сортировка списка, объединенного с 2 различными pojos согласно дате - PullRequest
0 голосов
/ 02 марта 2019

Вот мой класс pojo

inner class Data : Serializable {
    var abc: ArrayList<ABC>? = null
    var xyz: ArrayList<XYZ>? = null

    inner class XYZ : Serializable {
        var x: String? = null
        var date: String? = null
    }

    inner class ABC : Serializable {
        var a: String? = null
        var date: String? = null
    }
}

Я хочу объединить массив ABC и XYZ в один список и отсортировать этот список по дате

. До сих пор я сделал это

val items = ArrayList<Any>()
items.addAll(data!!.xyz!!)   
items.addAll(data!!.abc!!)

И получаю объединенный список вот так

x (from XYZ arraylist in descending order)
x (from XYZ arraylist in descending order)
x (from XYZ arraylist in descending order)
a (from ABC arraylist in descending order)
a (from ABC arraylist in descending order)
a (from ABC arraylist in descending order)

Но я хочу отсортировать весь список по дате

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Лучше всего было бы ввести интерфейс WithDate и позволить вашим классам реализовать его.

interface WithDate {
    val date: String?
}

inner class XYZ : Serializable, WithDate {
    var x: String? = null
    override var date: String? = null
}

Теперь у вас есть список WithDate, и вы можете использовать функцию sortBy.

val list = ArrayList<WithDate>()
...
list.sortBy(WithDate::date)

Если вы не можете изменить классы, сделайте следующее:

val list = ArrayList<Any>()
list.sortBy {
    when(it) {
        is Data.XYZ -> it.date ?: ""
        is Data.ABC -> it.date ?: ""
        else -> ""
    }
}
0 голосов
/ 04 марта 2019

пожалуйста, попробуйте с помощью следующих методов.Надеюсь, что это решит вашу проблему.

Сначала возьмите один общий класс pojo, как показано ниже

class MergedResponse : Serializable {

var data: Data? = null

inner class Data : Serializable {

@SerializedName(value = "xyz", alternate = arrayOf("abc"))
var mCommon: ArrayList<Common>? = null

inner class Common : Serializable {
        var x: String? = null
        var a: String? = null
        var date: String? = null
        }
    }
}

И затем напишите код ниже в вашем классе

val mainData = Gson().toJson(data!!)
var mJsonXYZ: JSONObject = JSONObject(mainData)
var mJsonABC: JSONObject = JSONObject(mainData)
mJsonXYZ.remove("abc")
mJsonABC.remove("xyz")

val mypojoXYZ = Gson().fromJson<MergedResponse.Data>(Gson().toJson(Gson().fromJson<Data>(mJsonXYZ.toString(), Data::class.java)), MergedResponse.Data::class.java)

val mypojoABC = Gson().fromJson<MergedResponse.Data>(Gson().toJson(Gson().fromJson<Data>(mJsonABC.toString(), Data::class.java)), MergedResponse.Data::class.java)

val itemsXYZ = ArrayList<MergedResponse.Data.Common>()
itemsXYZ.addAll(mypojoXYZ.mCommon!!)
itemsXYZ.addAll(mypojoABC.mCommon!!)


Collections.sort(itemsXYZ, object : Comparator<MergedResponse.Data.Common> {
    override fun compare(object1: MergedResponse.Data.Common, object2: MergedResponse.Data.Common): Int {
    return object1.date!!.compareTo(object2.date!!)
}
})
0 голосов
/ 02 марта 2019

Вы должны использовать Collections.sort для сортировки списка.Шаг 1: Когда вы объединяете свой список, используйте это

   Collections.sort(<UR LIST>, new compareMethod());

Шаг 2: Создайте compareMethod ();

class compareMethod implements Comparator<LISTNAME> {
    @Override
    public int compare(LISTNAME object1, LISTNAME object2) {
        return object1.getDate().compareTo(object2.getDate());
    }
}

надеюсь, что вы понимаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...