在java中迭代2个映射

在java中迭代2个映射,java,Java,我有一种情况,我在地图上循环了两次,对我的算法不是特别满意,我想知道是否有其他方法来实现这一点。这是我试图实现的东西的简化版本 import java.util.*; public class DummyTest{ public static void main(String []args){ Map<String, String> someMap = new HashMap<>(); someMap.put("Key1"

我有一种情况,我在地图上循环了两次,对我的算法不是特别满意,我想知道是否有其他方法来实现这一点。这是我试图实现的东西的简化版本

import java.util.*;

public class DummyTest{

     public static void main(String []args){
         Map<String, String> someMap = new HashMap<>();
         someMap.put("Key1", "Value1");
         someMap.put("Key2", "Value2");
         someMap.put("Key3", "Value3");

         for (final Map.Entry<String, String> entry : someMap.entrySet()) {

            // I think this is a code smell - Is there a way to avoid this inner
            // loop and still get the same output?
            for (final Map.Entry<String, String> innerLoop : someMap.entrySet())
            {
                if (entry.getValue() != innerLoop.getValue()) {
                    System.out.println(entry.getValue() + " " +
                    innerLoop.getValue());
                }
            }
         }
     }
}

我的解决方案同样低效,但效率不同。 试试这个:

... setup someMap however you want.

List<String> leftKeyList = new LinkedList<String>();
List<String> rightKeyList = new LinkedList<String>();

leftKeyList.addAll(someMap.keySet());
Collections.sort(leftKeyList); // you seem to want the keys sorted.

for (final String leftKey : leftKeyList)
{
    Set<String> rightKeySet = someMap.keySet());

    rightKeySet.remove(leftKey);

    rightKeyList.clear();
    rightKeyList.addAll(rightKeySet);
    Collections.sort(rightKeySet); // you seem to want these keys sorted as well.

    for (final String rightKey : rightSeyList)
    {
        System.out.println(leftKey + "   " + rightKey);
    }
}
根据项目的详细信息,将地图存储在一个表中,然后像这样将其自身连接起来可能是值得的(在本例中,表名为“我的”):


您是否正在尝试将每个键与其他键进行比较?不是真正的比较,而是对行
Value2 Value3
执行一些操作,这意味着与
Value3 Value2
不同的比较?请参见此问题@卓越链接!)这一行完美地概括了它:
笛卡尔乘积的复杂性是O(n2),没有捷径。
谢谢,我试图逃离
N^2
操作,但看起来我没有选择这是一个很好的机会,现在您知道如何遍历数据类型了:)
... setup someMap however you want.

List<String> leftKeyList = new LinkedList<String>();
List<String> rightKeyList = new LinkedList<String>();

leftKeyList.addAll(someMap.keySet());
Collections.sort(leftKeyList); // you seem to want the keys sorted.

for (final String leftKey : leftKeyList)
{
    Set<String> rightKeySet = someMap.keySet());

    rightKeySet.remove(leftKey);

    rightKeyList.clear();
    rightKeyList.addAll(rightKeySet);
    Collections.sort(rightKeySet); // you seem to want these keys sorted as well.

    for (final String rightKey : rightSeyList)
    {
        System.out.println(leftKey + "   " + rightKey);
    }
}
select
    a.blah, b.hoot
from
    a, b
select
   a.key, b.key
from
   blammy a,
   blammy b
where
   a.key != b.key