如何使用重写的compare方法对按类别分组的商品按价格排序
解决方案
你可以通过两种方式实现每个分类下的商品按售价排序:
方案1:分组阶段直接完成排序(推荐)
在调用Collectors.groupingBy时指定下游收集器,分组完成后直接对每个分类下的商品列表完成排序,无需额外遍历Map:
Map<Category, List<Item>> mapOfItems = items .stream() .collect(Collectors.groupingBy( Item::getCategory, Collectors.collectingAndThen( Collectors.toList(), list -> { list.sort(new ProductionSorter()); return list; } ) ));
方案2:对已生成的Map做遍历排序
如果你不需要修改之前的分组逻辑,可以直接遍历Map的所有值列表,逐个调用排序方法:
// 直接处理已生成的分组Map mapOfItems.values().forEach(itemList -> itemList.sort(new ProductionSorter()));
说明:以上两种方式默认都是升序排序,如果需要降序,只需把
ProductionSorter的compare返回值取反,或者调用list.sort(new ProductionSorter().reversed())即可。
内容的提问来源于stack exchange,提问作者JurajC
相关产品推荐
相关产品推荐

