如何在尽可能少的代码中从hashmap中随机选择具有特定值的键?

时间:2014-10-11 00:03:56

标签: java syntax hashmap

这不是关于哈希映射的问题。这是关于简写java表示法的问题。

我有一个HashMap。这个散列图只包含关键字'''' s'' w'。我想做的是从这个hashmap中随机选择一个键,但前提是它的对应值是真的。

我已经为我编写了一个函数来完成这个功能,它确实是我需要的。现在我想尽可能地压缩我的代码,同时仍然保持相同的功能。

首先我要告诉你的是我如何为上下文创建我的hashmap:

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;
            }

   }

我非常确信此功能的很大一部分可以用一行代码中的速记写入。我知道至少所有if语句都可以重写为更短。理想的是,而不是具有强烈定义的ArrayList对象,而不是具有永远不会被初始化的临时Array []。我的意思是对调用&#34; toArray()&#34;的代码执行计算。功能

附注 我知道有一个更好的方法可以做我想做的事情。也许使用哈希地图是一个糟糕的主意。也许一般使用字符串是愚蠢的。我完全清楚有一种更有效的方法可以做到这一点。话虽如此,我愿意接受建议;但是,我仍然想知道如何使用更少的行编写我的代码。

1 个答案:

答案 0 :(得分:0)

错误的数据结构。您只需要Set当前合法的举动。我还会将路线设为Enum而不是String,这会使Set成为EnumSet,并使用切换语句而不是if