【发布时间】:2021-03-07 21:26:02
【问题描述】:
我有下面的对象列表,需要根据最佳日期之前的成分对其进行排序。因此,具有最旧保质期的食谱应该排在列表的最后。
[
{
"id": 2,
"recipeName": "Burger",
"createdDate": "2020-11-22T00:00:00.000+00:00",
"ingredients": [
{
"ingredientId": 3,
"ingredientName": "Burger Bun",
"category": "",
"useBy": "2020-12-20",
"bestBefore": "2020-12-23"
},
{
"ingredientId": 4,
"ingredientName": "Beef Pattie",
"category": "",
"useBy": "2020-12-20",
"bestBefore": "2020-12-23"
},
{
"ingredientId": 5,
"ingredientName": "Tomato",
"category": "",
"useBy": "2020-12-20",
"bestBefore": "2020-09-10"
}
]
},
{
"id": 3,
"recipeName": "Chicken Salad",
"createdDate": "2020-11-22T00:00:00.000+00:00",
"ingredients": [
{
"ingredientId": 7,
"ingredientName": "Chicken",
"category": "",
"useBy": "2020-12-20",
"bestBefore": "2020-12-23"
},
{
"ingredientId": 6,
"ingredientName": "Salad Mix",
"category": "",
"useBy": "2020-12-20",
"bestBefore": "2020-11-15"
}
]
}
]
我尝试了下面的代码,但它只对配方中的成分进行排序,而不是列表中的配方对象。 Java 8 Streams 可以做到这一点吗?
List<Recipes> finalList = filteredList.stream().sorted((o1, o2) -> (int) (o1.getId() - o2.getId()))
.map(recipes -> {
List<Ingredients> in = recipes.getIngredients().stream()
.sorted(Comparator.comparing(Ingredients::getBestBefore).reversed()).collect(Collectors.toList());
recipes.setIngredients(in);
return recipes;
}).collect(Collectors.toList());
【问题讨论】:
-
当您说根据最佳日期之前的成分进行排序时,要对整个配方进行排序时应考虑哪种成分? (想想
bestBefore值最差和最好的成分是同一个食谱的一部分,这个食谱在你的排序列表中的位置是什么?) -
@Naman 如果任何成分具有最旧的
bestbeforedate,则该配方应排在列表的最后。在这种情况下,Burger 对象应该排在列表的最后,因为番茄拥有最旧的bestBeforedate
标签: java sorting java-stream