Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参考球队对象列表的Java足球队地图_Java_Hashmap - Fatal编程技术网

参考球队对象列表的Java足球队地图

参考球队对象列表的Java足球队地图,java,hashmap,Java,Hashmap,我是Java新手,目前正忙于一个作业问题 我需要为LeagueAdmin类创建一个名为addTeam的方法,它接受两个参数,不返回任何值。我得到了标题:public void addTeamString部门,Team Team 该方法应该检查团队地图中是否已经存在该部门的列表 如果该列表存在,则应将新团队添加到该部门的现有团队列表中 如果列表不存在,则应创建一个新的空团队列表,并将新团队添加到其中,然后应在团队中创建一个新的键值对,以分区为键,以新列表为值 我的代码如下: import java

我是Java新手,目前正忙于一个作业问题

我需要为LeagueAdmin类创建一个名为addTeam的方法,它接受两个参数,不返回任何值。我得到了标题:public void addTeamString部门,Team Team

该方法应该检查团队地图中是否已经存在该部门的列表

如果该列表存在,则应将新团队添加到该部门的现有团队列表中

如果列表不存在,则应创建一个新的空团队列表,并将新团队添加到其中,然后应在团队中创建一个新的键值对,以分区为键,以新列表为值

我的代码如下:

import java.util.*;
public class LeagueAdmin
{
    public Map<String, List<Team>> teams;
    /**
    * Constructor for objects of class LeagueAdmin
    */
    public LeagueAdmin()
    {
        this.teams = new HashMap<String, List<Team>>();
    }
}
public class Team
{  
    private String name;
    private String division;
    private int won;
    private int drew;
    private int lost;
    // no need to record points as = 3*won + drew   


    /**
    * Constructor for objects of class Team
    */
    public Team(String aName, String aDivision)
    {
        name = aName;
        division = aDivision;
        // no need to set won, drew and lost to 0
    }
}
如果有人能给我一些建议那就太好了


谢谢,凯特在回答你的问题之前,我有几点建议

尽可能始终将局部变量和字段声明为final 总是格式化你的代码。这似乎是多余的,但我不经常看到这样做 尽可能在线初始化最终字段,而不是在构造函数内部 不要公开字段,这些字段是实现细节的一部分 编辑:也许你需要一个简化版,我也会加上,但继续阅读我的答案,很有趣

按照代码中的注释理解流程

public class LeagueAdmin {
    private final Map<String, List<Team>> teams = new HashMap<String, List<Team>>();

    public void addTeam(final String division, final Team team) {
        // We retrieve the team list, if any
        List<Team> list = map.get(division);

        // We check if the list was already there, or we have to create a new one
        if (list == null) {
           // The list is null, we need to insert a new one!
           list = new ArrayList<>();
           map.put(division, list);
        }

        // We add the team to the list
        list.add(team);
    }
}
它的作用是

尝试获取与输入的键关联的值 如果未找到值,请使用函数参数关联新值 返回关联的值 另外,你会问自己什么是。 嗯,_uu只是一个有效的变量名,用来说嘿,我不需要这个 ->箭头是lambda表达式的一部分,它基本上是一个内嵌函数

建议的ComputeFabSent是正确的,但可能不是您的课程讲师想要的。她/他可能希望您编写更多的代码,就像我们在最近添加新方法之前在实际工作中所做的那样

老式的addTeamString分区,需要添加到LeagueAdmin的Team方法会询问地图是否有分区字符串的键。如果没有这样的键,请添加一个,并将一个新的空团队列表作为其值,您已将有问题的团队添加到该列表中。如果有这样一个键,检索它的值,一个列表,然后将有问题的团队添加到该列表中

作为一项家庭作业,要完成学习,你需要努力解决这个问题,而不是复制一些现有的代码。研究JavaDoc中的和接口。按照我上面的文章作为伪代码来引导您了解逻辑。确保您理解每个类背后的思想,尤其是字典或关联数组。在纸上画一张图表,想象我上面概述的每一步

所以一个联盟对象持有一个地图对象。该映射包含一组键,每个键都是一个部门名称,在您的情况下是一个字符串,在实际工作中更可能是一个部门类。作为地图中的一个键意味着每个部门的名称将引导您找到一个列表对象,一个团队的集合。列表按项目添加的顺序保存项目。顺便说一句,一组人也希望在这里工作

请注意,在这个图表中,一个列表对象是如何为空的,这意味着它尚未分配任何团队。空名单不是什么;空名单是一种东西。空列表仍然是一个有效对象,就像一个没有任何水果的果篮仍然是一个果篮一样。如果没有列表,不管是空的还是其他的,尚未分配给映射中的键,那么键将指向null,其中null实际上意味着“什么都没有”。在这个图中,我们看到映射中的“division-z”键根本没有被分配任何列表对象,所以它指向空


作为家庭作业,我怀疑老师希望学生练习手动检查键和值,而不是使用computeIfAbsent的快捷方式。嗨,Kitkat,请告诉我们您在这样做时发现了什么具体问题?我们无法为您完成任务,但我们可以帮助解决您可能遇到的问题。您好,我理解地图和列表,我似乎无法让可变团队引用地图,因为地图的值是团队对象的列表。当我尝试使用添加、包含、放置等方法时,它们都不起作用。哇,这太神奇了,谢谢你:我现在只需要弄清楚如何让地图保存一个对象列表作为它的值,我想我现在有进展了@KitKat很好。如果您使用的是IntelliJ/NetBeans/Eclipse等对象,请在逐步执行代码时使用调试器查看所有这些对象的内容。或者,在添加项目时调用对象上的toString以查看其内容。
public class LeagueAdmin {
    private final Map<String, List<Team>> teams = new HashMap<String, List<Team>>();

    public void addTeam(final String division, final Team team) {
       teams.computeIfAbsent(division, __ -> new ArrayList<>()).add(team);
    }
}
computeIfAbsent(Key, Function)