【问题标题】:Can hashmap can be of return type of function as well? [closed]hashmap 也可以是返回类型的函数吗? [关闭]
【发布时间】:2021-03-05 01:00:52
【问题描述】:

我正在浏览此示例代码,但无法遵循和理解该代码。

  • 哪一部分是主函数的返回类型,哪一部分是属性和函数名。
  • 然后我们可以添加 arraylist 作为 map 中键的值吗?
  • 它是如何使用 for 循环使用 entryset() 进行迭代并将那些树类型的 Arraylist 放入 map 中的 --
public HashMap<String,ArrayList> splitToKategorieArrays(HashMap<Integer, Teilnehmer> teilnehmerListe )

你能解释一下那个函数类型吗?是返回类型为hashmap的函数吗?

public HashMap<String,ArrayList<Teilnehmer>> splitToKategorieArrays(HashMap<Integer, Teilnehmer> teilnehmerListe ){

    ArrayList<Teilnehmer> junioren = new ArrayList<Teilnehmer>();
    ArrayList<Teilnehmer> senioren = new ArrayList<Teilnehmer>();
    ArrayList<Teilnehmer> elite = new ArrayList<Teilnehmer>();
    HashMap<String, ArrayList<Teilnehmer>> teilnehmerSplit = new HashMap<String, ArrayList<Teilnehmer>>();

    for(Map.Entry<Integer, Teilnehmer> entry : teilnehmerListe.entrySet()) {
        Teilnehmer teilnehmer = entry.getValue();
        if (teilnehmer.getKategorie() == 1){
            junioren.add(teilnehmer);
        } else if (teilnehmer.getKategorie() == 2){
            senioren.add(teilnehmer);
        } else if (teilnehmer.getKategorie() == 3){
            elite.add(teilnehmer);
        }
    }
    teilnehmerSplit.put("junioren",junioren);
    teilnehmerSplit.put("senioren",senioren);
    teilnehmerSplit.put("elite",elite);

    return teilnehmerSplit;
}

【问题讨论】:

  • 是的,就是方法的返回类型。你的困惑在哪里?你认为它还能是什么?
  • 是的。一个函数可以返回一个HashMap。就像它可以返回任何其他类型的对象一样。
  • 是的。该方法创建一个新的HashMap,将三个条目放入该HashMap,然后返回它。所以返回类型是HashMap&lt;String,ArrayList&lt;Teilnehmer&gt;&gt;。当您调用此方法时,您可能希望将其返回值分配给该类型的变量。或者可能只是Map&lt;String,ArrayList&lt;Teilnehmer&gt;&gt;。
  • @DawoodibnKareem 你能解释一下 for 循环是如何工作的吗..
  • 当然。该循环仅遍历 teilnehmerListe 中的条目,将每个条目复制到三个新列表之一,具体取决于其 Kategorie。

标签: java arraylist hashmap


【解决方案1】:

如 cmets 中所述,函数返回 hashmap 是很好的。

给定的代码 sn-p 只是将输入哈希图中的 Teilnehmer 值按类别(1、2 或 3)分组,将这些值添加到单独的列表中,并将列表放入带有字符串的新映射中键。

可以使用Java Stream API 以更简洁的形式重写此方法,特别是filter 用于类别,groupingBy 收集器创建&lt;String, List&lt;Teilnehmer&gt;&gt; 的映射:

public HashMap<String, List<Teilnehmer>> splitToKategorieArrays(HashMap<Integer, Teilnehmer> teilnehmerListe ) {
    // prepare string names of the categories
    String[] categories = {
        "junioren",
        "senioren",
        "elite"
    };
    return teilnehmerListe
        .values()
        .stream() // stream of Teilnehmer objects
        // categories should be in range [1..3]
        .filter(tn -> 0 < tn.getKategorie() && tn.getKategorie() <= 3)
        // -1 to match index in `categories` array
        .collect(Collectors.groupingBy(tn -> categories[tn.getKategorie() - 1]));
}

【讨论】:

  • 嗨,Alex,你能解释一下 for 循环是如何工作的吗.. 我听不懂
  • 嗨,您指的是哪个for 循环?在你的帖子里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 2017-07-27
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
相关资源
最近更新 更多