JAVA:Hashmap-返回字符串的arraylist

JAVA:Hashmap-返回字符串的arraylist,java,string,map,arraylist,hashmap,Java,String,Map,Arraylist,Hashmap,我正在尝试编写一个方法,该方法将从HashMap返回字符串的ArrayList 目前,我有一个HashMap,其中包含一个字符串作为标识符(key?),还有一个String类型列表,其中包含与之关联的所有值。该程序旨在模拟火车/地铁导航工具,因此第一个字符串是车站名称,arraylist是一系列显示所有连接车站的字符串 这是我到目前为止所拥有的,但它目前不会编译。我知道还有几种其他的方法可以使用,所以我只列出了最后一种我遇到困难的方法(getConnections) 我是这方面的新手,所以如果有

我正在尝试编写一个方法,该方法将从HashMap返回字符串的ArrayList

目前,我有一个HashMap,其中包含一个字符串作为标识符(key?),还有一个String类型列表,其中包含与之关联的所有值。该程序旨在模拟火车/地铁导航工具,因此第一个字符串是车站名称,arraylist是一系列显示所有连接车站的字符串

这是我到目前为止所拥有的,但它目前不会编译。我知道还有几种其他的方法可以使用,所以我只列出了最后一种我遇到困难的方法(
getConnections

我是这方面的新手,所以如果有人能指出我哪里出了问题,我会非常感激

public class MyNetwork implements Network {
    Map<String, List<String>> stations = new HashMap<>();

    @Override
    public String[] getConnections(String fromStation) {

    /**
     * Get a list of all stations directly connected to a given station.
     *
     * @pre fromStation has been added to the network by the method
     * addStation.
     * @param fromStation
     * @return A list of all the stations to which there is a direct
     * connection from fromStation.
     */
    ArrayList<String> Connections = new ArrayList<>();
    Set<String> keys = stations.keySet();

    for (String k : keys) {
        String keyValue;
        keyValue = (stations.get(fromStation));
    }

    return fromStation;
}
公共类MyNetwork实现网络{
Map stations=new HashMap();
@凌驾
公共字符串[]getConnections(来自Station的字符串){
/**
*获取直接连接到给定站点的所有站点的列表。
*
*@pre-fromStation已通过该方法添加到网络中
*addStation。
*@param fromStation
*@返回有直达电话的所有电台的列表
*从车站接过来。
*/
ArrayList Connections=新建ArrayList();
设置键=站。键集();
用于(字符串k:键){
字符串键值;
keyValue=(stations.get(fromStation));
}
从车站返回;
}

无需显式迭代
映射中的值,只需使用内置方法即可。整个
getConnections()
实现可以写在一行中:

return stations.get(fromStation).toArray(new String[0]);
工作原理:

  • 首先,我们使用
    get()
  • 上一步返回一个
    列表
  • 现在,我们只需要使用
    toArray()
    将其转换为
    String[]
    。为了类型安全,我们传递了一个预期返回类型的数组

或者,您也可以将返回类型更改为
列表
,除非严格必要,否则无需将
列表
转换为数组;如果您决定这样做,
toArray()
调用将是不必要的。

感谢奥斯卡的解释,真的很有帮助!我有一些建议,也许我最好使用多重映射作为代码的基础,而不是哈希映射。您的解决方案是否也适用于此,或者它是否非常依赖于我的重新实现?我很高兴!什么你已经实现的确实是一个多重映射。如果它在工作,我就不去管它了,但是有一些现有的实现,例如在或中定义的接口和具体类。我的解决方案可能需要或可能不需要进行调整,以使用那些依赖于实现的。检查它们,看看它们是否合适;)因此在与在,这行代码(应该返回一个数组,其中包含现在作为字符串添加到网络中的所有站)似乎不起作用?编译器似乎不喜欢将此信息传递到新数组?在将值添加到新数组之前,是否必须将其转换为字符串?public string[]getStations(){return stations.toArray(新字符串[0]);