-2

我很难理解地图,我被要求使用比较器和供应商从另一个地图中制作一个具有不同键和值的 SortedMap。它对我们说“teams”键是一个团队的名称,值是团队的信息,新排序的地图以团队拥有的点为键,以团队名称的集合为值有了这些点,收集由供应商提供。我不明白我将如何做到这一点。我想通过迭代这个来验证“团队”中是否有一个带有供应商名称的键,如果有,我会将该名称保存在列表中。但在那之后我不知道我将如何构建 SortedMap。有什么建议么?

编辑:这就是我所做的。

public static <C extends Collection<String>> SortedMap<Integer, C> toTable(Map<String, Team> teams, Comparator<Integer> cmp, Supplier<C> supplier) {
  SortedMap<Integer, C> sm = new TreeMap<Integer, C>(cmp);
  List<C> aux= new ArrayList<C>();
  C newTeam = null;
  int totalNames = supplier.get().size();
  while(totalNames>0) {
    if(teams.containsKey(supplier.get().iterator().next()))
        aux.add(supplier.get());
        totalNames--;
  }

  int size = aux.size();
  while (size>0){
    sm.put(1/*how to get a new key*/,aux.iterator().next());
    size--;
  }

return sm;
}

4

1 回答 1

0

原来我对问题的解释是错误的,经过半天的尝试解决它,我明白我对供应商的使用完全关闭了。我应该做的是循环遍历 Map teams.values() 并为每个团队验证点数是否已经作为 Map sm 上的键存在。如果它存在,我应该获取关联的值并使用方法 get on sm 添加新的团队名称。如果没有,使用供应商我应该获得一个新列表(使用方法获取供应商)并将新团队名称添加到此列表中。最后我应该在 sm 中放置一个带有点数和新列表的新条目(使用 put 方法)

解决方案:

public static <C extends Collection<String>> SortedMap<Integer, C> toTable(Map<String, Team> teams, Comparator<Integer> cmp,
                                                                               Supplier<C> supplier) {
        SortedMap<Integer, C> sm = new TreeMap<Integer, C>(cmp);
        C newTeam = null;
        for (Team t: teams.values()){
            if(sm.containsKey(t.getPoints())) {
                sm.get(t.getPoints());
                newTeam.add(t.getName());
            }
            else{
                newTeam = supplier.get();
                newTeam.add(t.getName());
                sm.put(t.getPoints(),newTeam);
            }
        }
        return sm;
    }

于 2021-12-28T19:30:38.000 回答