Java 集合映射中的上一个和下一个元素
我有一张这样的地图:Java 集合映射中的上一个和下一个元素,java,Java,我有一张这样的地图: Map <Set<String>,Set<Integer>> myMap = new LinkedHashMap<Set<String>, Set<Integer>>(); Map myMap=newlinkedhashmap(); 我需要对它进行迭代,但在迭代的过程中,我需要跟踪下一个和上一个条目,并对它们执行一些操作。 类似这样的东西,但这段代码不正确,我似乎不知道如何获取键的值: String
Map <Set<String>,Set<Integer>> myMap = new LinkedHashMap<Set<String>, Set<Integer>>();
Map myMap=newlinkedhashmap();
我需要对它进行迭代,但在迭代的过程中,我需要跟踪下一个和上一个条目,并对它们执行一些操作。
类似这样的东西,但这段代码不正确,我似乎不知道如何获取键的值:
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;
}
stringprevious=null;
对于(条目:nnpMap.entrySet()){
for(迭代器i=entry.getKey().Iterator();i.hasNext();){
国际nnpStartIndex;
int指数;
String元素=i.next();
如果(上一个==null){
先前=元素;
}
条目对象具有getKey和getValue对,可用于查找条目的key和value对象。
参见javadoc:没有从迭代器中获取下一个元素的方法。确实有,但是这样做,您将使其成为当前元素。因此解决方案是跟踪前两个元素,并假设前一个元素是当前元素,而当前元素是下一个元素:
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);
}
-然后对doSomeOperation()
的调用将是:
doSomeOperation(null, "a", "b")
doSomeOperation("a", "b", "q")
doSomeOperation("b", "q", "c")
doSomeOperation("q", "c", "x")
doSomeOperation("c", "x", null)
您会注意到,正如在注释中所讨论的,因为我对内部集合使用了
HashSet
,所以它们的元素的顺序可能既不是插入顺序,也不是字母顺序。Map.Entry没有任何entrySet()方法。它有一个getKey(),返回条目的键(在本例中是一个集合)和一个getValue(),它返回条目的值(本例中为一个集合)。此外,如果它为空,您还将初始化previous
。因此previous将始终是映射的第一个键的第一个元素。而且它们不会以任何特定顺序返回。因此,对“上一个”和“下一个”进行操作似乎是随机的。但我想您已经意识到了这一点(条目:nnpMap.entrySet()){但它应该是(条目:myMap.entrySet())的){
@efekActive,由于此映射是一个LinkedHashMap
,因此定义了元素的顺序。稍后有人更改了其他映射的LinkedHashMap,而你们有一个错误。我得到了这个错误。我的主要问题是从映射中获取上一个和下一个元素。映射中的元素没有定义顺序。您可能需要使用其他一些元素数据结构来按您想要的顺序存储键。如果您真的非常想这样做,您可以在entryset上使用迭代器来查找下一个值
doSomeOperation(null, "a", "b")
doSomeOperation("a", "b", "q")
doSomeOperation("b", "q", "c")
doSomeOperation("q", "c", "x")
doSomeOperation("c", "x", null)