【问题标题】:Turning a Map into a SortedMap with different keys将 Map 转换为具有不同键的 SortedMap
【发布时间】:2021-12-28 05:22:28
【问题描述】:

我很难理解地图,我被要求使用比较器和供应商从另一个地图中制作一个具有不同键和值的 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;
}

【问题讨论】:

  • 您的问题解释不够好,因此问题不清楚。首先,当您提出问题时,不要以与朋友交谈的风格来写它,而是使用正式的风格并描述您在实施解决方案时遇到的关键点和问题。其次,您必须实施解决方案,如果没有成功,您将陷入困境并寻找解决方案,最终来到这里并提出问题。
  • 能否分享一下代码示例?
  • 邮政编码作为文本而不是图像。

标签: java maps sortedmap supplier


【解决方案1】:

原来我对问题的解释是错误的,经过半天的尝试解决它,我明白我对供应商的使用完全关闭了。 我应该做的是循环遍历 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多