如何用尽可能少的代码从hashmap中随机选择具有特定值的键? 这不是关于hashmaps的问题。这是一个关于速记java符号的问题。

如何用尽可能少的代码从hashmap中随机选择具有特定值的键? 这不是关于hashmaps的问题。这是一个关于速记java符号的问题。,java,syntax,hashmap,Java,Syntax,Hashmap,我有一个HashMap。此hashmap仅包含键'n'、'e'、's'、'w'。我想做的是从这个hashmap中随机选择一个键,但前提是它对应的值为true 我已经写了一个函数来为我做这件事,它的工作方式正是我所需要的。现在,我想尽可能地压缩我的代码,同时仍然保持相同的确切功能 我将向您展示的第一件事是如何为上下文创建hashmap: 接下来是相关代码: 我非常确信,这个功能的一大部分可以用一行代码简写。我知道至少所有的if语句都可以改写为更短的。与其拥有一个强定义的ArrayList对象,不如

我有一个HashMap。此hashmap仅包含键'n'、'e'、's'、'w'。我想做的是从这个hashmap中随机选择一个键,但前提是它对应的值为true

我已经写了一个函数来为我做这件事,它的工作方式正是我所需要的。现在,我想尽可能地压缩我的代码,同时仍然保持相同的确切功能

我将向您展示的第一件事是如何为上下文创建hashmap:

接下来是相关代码:

我非常确信,这个功能的一大部分可以用一行代码简写。我知道至少所有的if语句都可以改写为更短的。与其拥有一个强定义的ArrayList对象,不如拥有一个从未初始化过的临时数组[]。我的意思是对调用toArray函数的代码执行计算

旁注
我知道有更好的方法来做我想做的事。也许使用哈希映射是个糟糕的主意。也许一般来说使用字符串是愚蠢的。我完全知道,有一种更有效的方法可以做到这一点。尽管如此,我愿意接受建议;然而,我仍然想知道如何用更少的行编写代码。

错误的数据结构。您只需要一组当前合法的移动。我还将使方向成为Enum而不是字符串,这使集合成为EnumSet,并使用switch语句而不是if链

HashMap<String, Boolean> potentialMoves2 = new HashMap<String, Boolean>();
        potentialMoves2.put("n", true);
        potentialMoves2.put("e", true);
        potentialMoves2.put("s", true);
        potentialMoves2.put("w", true);
private void randomlyMoveCharacter(double x, double y, Character character){

            List<String> myArrayList = new ArrayList<String>();
            for(Map.Entry<String,Boolean> mySet : character.potentialMoves2.entrySet()){
                if(mySet.getValue().equals(true)){
                    myArrayList.add(mySet.getKey());
                }
            }

            String direction = myArrayList.get(new Random().nextInt(myArrayList.size()));

            if(direction.equals("n")){
                character.mapY++;
                character.hasMoved = true;
            }
            if(direction.equals("e")){
                character.mapX++;
                character.hasMoved = true;
            }
            if(direction.equals("s")){
                character.mapY--;
                character.hasMoved = true;
            }
            if(direction.equals("w")){
                character.mapX--;
                character.hasMoved = true;
            }

   }