I have two ArrayLists:
data class Food(val name: String)
val addedFoodList = arrayListOf(
Food(name = "Avocado Oil")
)
val foodList = arrayListOf(
Food(name = "Avocado"),
Food(name = "Avocado Second"),
Food(name = "Avocado Third"),
Food(name = "Avocado Oil"),
)
I want to sort foodList according to the following condition:
If a food with the same name is found in addedFoodList, move this food to the first place in ArrayList
My sorting method:
fun getSortedFoodList(foodList: ArrayList<Food>): List<Food> {
val sortedFoodList = foodList.sortedBy { food ->
val foundFood = mockAddedFood.find { addedFood ->
food.name == addedFood.name
}
val indexOf = mockAddedFood.indexOf(foundFood)
return@sortedBy indexOf
}
return sortedFoodList
}
Result:
[Food(name=Avocado), Food(name=Avocado Second), Food(name=Avocado Third), Food(name=Avocado Oil)]
Expected:
[Food(name=Avocado Oil), Food(name=Avocado), Food(name=Avocado Second), Food(name=Avocado Third)]
Can you please tell me why foodList is not sorted as expected?
fun getSortedFoodList(foodList: List<Food>) = foodList.partition{ it in addedFoodList }.let{ it.first + it.second }. (Though in either case, you'd get better performance from passing in a set rather than a list.)