0

我有一个字符串 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");
        }
    }

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

some1 能把我推向正确的方向吗?

谢谢。

4

1 回答 1

2

您真的非常想定义一个对象来保存您的数据,而不是使用HashMaps.

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/,因为它介绍了对象以及它们为何有用。

于 2012-06-19T21:39:40.927 回答