0

MapsList と比較する必要がある String exp があります。

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

私は経験を取り、配列に分割します。

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

次に、配列を 2 つの小さなサブ配列に分割します。1 つはキー用で、もう 1 つは値用です。その後、私は比較します...

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

したがって、私の問題は、マップごとにこれを実行できることですが、イテレータを使用して実装する方法がわかりません。

誰かが私を正しい方向に押し進めることができますか?

ありがとう。

4

1 に答える 1

2

sを使用する代わりに、データを保持するオブジェクトを本当に定義したい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/を参照してください。オブジェクトとその有用性が紹介されています。

于 2012-06-19T21:39:40.927 に答える