【问题标题】:Sort using overriden method compare [duplicate]使用覆盖方法比较排序[重复]
【发布时间】:2021-12-25 13:32:51
【问题描述】:

我正在尝试按价格对项目进行排序,但每个项目都属于一个类别,因此我必须创建一个以类别为键、项目为值的地图,并且我必须使用 Comparator 类对其进行排序。

这是Comparator

public class ProductionSorter implements Comparator<Item> {
    public ProductionSorter(){};

    @Override
    public int compare (Item a, Item b){
        return a.getSellingPrice().compareTo(b.getSellingPrice());
    }
}

这是地图

Map <Category, List<Item>> mapOfItems = items
                .stream()
                .collect(Collectors.groupingBy(Item::getCategory));

我不知道如何在这张地图上按价格对商品进行排序。

【问题讨论】:

  • 商品的价格在列表中,您将按哪些价格排序?

标签: java sorting dictionary comparator


【解决方案1】:

以下应该可以解决问题:

Map<String, List<Item>> mapOfItems = items.stream()
        .collect(Collectors.groupingBy(Item::getCategory,
                collectingAndThen(toList(), e -> e.stream().sorted(new ProductionSorter()).collect(toList()))));

使用以下导入:

import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;

它与您已有的类似,但带有额外的Collector,以便您可以定义您希望如何收集数据。

您可以在reference documentation 阅读有关collectingAndThen() 的更多信息。

【讨论】:

  • 非常感谢,但是这个 e -> e.stream... 给我带来了问题。我收到错误“lambda 表达式中的参数类型不兼容:预期的 List 但找到 List”。
  • 这很奇怪,这对我有用。也许你导入了错误的类?我已将我的导入添加到答案中。请检查它们;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2020-02-05
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 2014-10-21
相关资源
最近更新 更多