Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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,我需要在下面的代码中为roomType添加说明的帮助。现在我只能在roomType中添加一个单词,但我希望能够添加多个单词,例如“双套房” 扫描仪输入=新扫描仪(System.in); Map rooms=新建HashMap(); 字符串roomNumber=“0”; 字符串roomType=null; System.out.println(“输入房间号和类型:[输入'stop'退出]”); 而(!roomNumber.equals(“stop”)){ input.useDelimiter(“,

我需要在下面的代码中为roomType添加说明的帮助。现在我只能在roomType中添加一个单词,但我希望能够添加多个单词,例如“双套房”

扫描仪输入=新扫描仪(System.in);
Map rooms=新建HashMap();
字符串roomNumber=“0”;
字符串roomType=null;
System.out.println(“输入房间号和类型:[输入'stop'退出]”);
而(!roomNumber.equals(“stop”)){
input.useDelimiter(“,*”);
roomNumber=input.next();
如果(roomNumber.equals(“停止”)){
打破
}
roomType=input.next();
房间。放置(房间号、房间类型);
}
我也尝试过这种方法:

    Map<String, List<String>> rooms = new HashMap<String, List<String>>();
    List<String> roomTypeList= new ArrayList<String>();
    List<String> description= new ArrayList<String>();

    String roomNumber = "0";
    String roomType = null;
    System.out.println( "Enter room numbers and type : [ Enter  'stop' to quit ]" );

    while(!roomNumber.equals("stop")){
        roomNumber = input.next();

        if(roomNumber.equals("stop")){
            break;
        }
        roomType = input.next();
        description.add(roomType);
        rooms.put(roomNumber, description);
    }
Map rooms=newhashmap();
List roomTypeList=新建ArrayList();
列表说明=新建ArrayList();
字符串roomNumber=“0”;
字符串roomType=null;
System.out.println(“输入房间号和类型:[输入'stop'退出]”);
而(!roomNumber.equals(“stop”)){
roomNumber=input.next();
如果(roomNumber.equals(“停止”)){
打破
}
roomType=input.next();
description.add(房间类型);
房间。放置(房间号、说明);
}
但扫描仪不能以这种方式正常工作。 谢谢
另外,欢迎使用任何其他备注

看起来您希望将扫描仪的默认分隔符从空格改为逗号空格

// Set delimiters to space and comma.
//  ", *" tells Scanner to match a comma and zero or more spaces as
// delimiters.
input.useDelimiter(", *");
现在,当你进入“双人套房房间”时,下一步应该拿起双人间,然后再打电话时就会拿起套间等。。通过将分隔符改为“,”可以输入任意多的空格,直到碰到逗号为止,它将停止接受输入


有意义吗?

我不确定您要使用哪种描述,但我会将类型和描述包装在某个对象/枚举中

也许像

public enum RoomType {
    SOME_ROOM_TYPE("description of first type"),
    SOME_OTHER_TYPE("description of other type");

    String description;

    public RoomType(String description) {
        this.description = description;
    } 

    public static RoomType convert(String original) {
         // some code for converting the string from the scanner, 
         // maybe Enum.valueOf(...)
    }
}
然后在扫描仪循环中:

rooms.put(roomNumber, RoomType.convert(description));

我建议使用Apache Commons中的
MultiValueMap


我想,番石榴的多重地图会对你有所帮助。我认为地图中的“值”应该是某个对象,而不是
字符串。对象将同时包含“房间类型”和描述。从我所看到的,你没有将房间号平均映射到两个字符串;相反,您的两个字符串有两个不同的用途,因此multimap或
Map
不是合适的解决方案。@emily您有什么错误吗?@KickButtowski没有我没有errors@Emily你为什么不照ajb说的做?所以您可以更加有条理是的,这很有意义,我的第二个实现的行为与您描述的完全相同,但是delimiter并没有解决我的问题,但感谢您的响应。您是否尝试过在.next()运行后打印出变量进行调试,以便您可以看到它在使用所需输入时的行为?为了清晰起见,您需要在地图中输入两个值,key=“13”value=“双套房”,key=“28”value=“单标准房”。对的如果是这种情况,没有理由使用对象,并且您使用的是正确的数据结构,那么问题很可能在于调试输入法,这有时会令人困惑。因此,我只运行了第一个版本,添加了一些打印语句,并获得了一些有趣的输出。double#=1 Type=双套房房间#=套房类型=房间3 balmy heck hole balmy#=3 Type=balmy heck hole#=heck Type=hole stop如上所示,roomType变量是以空格分隔的,并且只从输入的值中获取最后一个值。如果您更改分隔符,将有效地解决您的问题。我已编辑了第一个版本,请检查它是什么意思?如果是,那么出于某种原因,我无法退出while循环。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,只有链接的答案可能会无效。我添加了一个代码示例来解决您的评论。顺便说一句,我希望在删除问题之前先发表评论。
rooms.put(roomNumber, RoomType.convert(description));
// create multimap to store key and values
MultiMap multiMap = new MultiValueMap();

// put multiple values for "key" 
multiMap.put("key", "Apple");
multiMap.put("key", "Aeroplane");
multiMap.put("key", "Hello World");