集合图中的上一个和下一个元素

时间:2017-01-13 14:30:06

标签: java

我有一张如下所示的地图:

Map <Set<String>,Set<Integer>> myMap = new LinkedHashMap<Set<String>, Set<Integer>>();

我需要迭代它但是在迭代时我需要跟踪下一个和前一个条目并对它们进行一些操作。 像这样的东西,但这段代码不正确,我似乎无法弄清楚如何获得密钥的价值:

String previous = null;

                for (Entry<Set<String>, Set<Integer>> entry : nnpMap.entrySet()){


                    for (Iterator<String> i = entry.getKey().iterator(); i.hasNext();){
                        int nnpStartIndex;
                        int nnpEndIndex;

                        String element = i.next();

                        if (previous == null){
                            previous = element;
                        }

2 个答案:

答案 0 :(得分:0)

Entry对象具有getKey和getValue对,您可以使用它们来查找条目的键和值对象。 请参阅javadoc:https://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html

答案 1 :(得分:0)

没有从迭代器获取下一个元素的事情。嗯,有,但通过这样做,你正在使它成为当前元素。因此,解决方案是跟踪两个之前的元素,并假装前一个元素是当前元素,当前元素是下一个元素:

    String previous = null;
    String current = null;
    for (Set<String> key : myMap.keySet()) {
        for (String next : key) {
            if (current != null) {
                doSomeOperation(previous, current, next);
            }
            previous = current;
            current = next;
        }
    }
    if (current != null) { // if all sets were empty, current is still null
        doSomeOperation(previous, current, null);
    }

现在,如果我这样填写myMap

    myMap.put(new HashSet<String>(Arrays.asList("a", "b")), null);
    myMap.put(new HashSet<String>(), null); // empty set
    myMap.put(new HashSet<String>(Arrays.asList("c", "q", "x")), null);

- 然后对doSomeOperation()的调用将是:

doSomeOperation(null, "a", "b")
doSomeOperation("a", "b", "q")
doSomeOperation("b", "q", "c")
doSomeOperation("q", "c", "x")
doSomeOperation("c", "x", null)

您将注意到,正如评论中所讨论的那样,由于我使用HashSet作为内部集合,因此它们的元素可能既不是插入顺序也不是字母顺序。