使用迭代器来查看hashmaps列表

时间:2012-06-19 21:06:59

标签: java

我有一个String exp,我必须与mapsList进行比较。

  String exp = "nodeId=1&&name=Router||level=1";
  List mapList = new ArrayList();

  Map map = new HashMap();
  map.put("nodeId","1");
  map.put("name","Router");
  map.put("level", "1");

  Map map1 = new HashMap();
  map1.put("nodeId","2");
  map1.put("name","Router");
  map1.put("level","2");

  Map map2 = new HashMap();
  map2.put("nodeId","3");
  map2.put("name","Router");
  map2.put("level","3");

  mapList.add(map);
  mapList.add(map1);
  mapList.add(map2);

我把exp分成一个数组。

  String delims = "[\\&&\\||\\=]+";
  String[] token = exp.split(delims);

然后我将数组分成两个较小的子数组。一个用于键,另一个用于值。之后我比较......

    if(map.keySet().contains(a1[0]) && map.keySet().contains(a1[1]) || map.keySet().contains(a1[2])){
        if(map.values().contains(a2[0]) && map.values().contains(a2[1]) || map.values().contains(a2[2])){
            System.out.println("Match\tMapKeys: "+map.keySet()+" Values: "+map.values());
        }else{
            System.out.println("No Match\t");
        }
    }

所以我的问题是我可以为每个地图执行此操作,但无法弄清楚如何使用iterator实现它。

有些人可以把我推向正确的方向吗?

感谢。

1 个答案:

答案 0 :(得分:2)

你真的,真的想要定义一个对象来保存你的数据,而不是使用HashMap

class Node {
    private int id;
    private String name;
    private int level;

    public Node(int id, String name, int level) {
        this.id = id;
        this.name = name;
        this.level = level;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getLevel() {
        return level;
    }
}

现在你像这样填充列表

    List<Node> nodeList = new ArrayList<Node>();

    nodeList.add(new Node(1, "Router", 1));
    nodeList.add(new Node(2, "Router", 2));
    nodeList.add(new Node(3, "Router", 3));

你可以像这样找到你的匹配

    String exp = "nodeId=1&&name=Router||level=1";

    String delims = "[\\&&\\||\\=]+";
    String[] token = exp.split(delims);

    int id = Integer.parseInt(token[1]);
    String name = token[3];
    int level = Integer.parseInt(token[5]);

    boolean match = false;

    for (Node node : nodeList) {
        if (node.getId() == id && node.getName().equals(name)
                && node.getLevel() == level) {
            System.out.println("Match found: " + node);
            match = true;
        }
    }

    if (!match) {
        System.out.println("No match");
    }

给出了以下输出

Match found: Node@1391f61c

,下一步是实施toString

您应该查看http://docs.oracle.com/javase/tutorial/java/concepts/,因为它会介绍对象及其有用的原因。