Java 在ArrayList内的LinkedHashMap中查找和分配值的其他方法

Java 在ArrayList内的LinkedHashMap中查找和分配值的其他方法,java,arraylist,linkedhashmap,Java,Arraylist,Linkedhashmap,我有一个代码显示在下面,它只是工作良好。但我想知道是否还有其他方法来实现这一点?基本上,我对4个循环所做的是,如果使用SeqGenerate中的字符串/元素找到匹配项,则比较CopyMatrix的键并为其分配一个新值,CopyMatrix是arraylist中的linkedhashmap。我有另一个解决方案,也是一个循环,但它不起作用,所以我坚持使用这个方案,我想知道是否有其他方法可以用更少的循环或其他一些技术来实现这一点 ArrayList<ArrayList<String>

我有一个代码显示在下面,它只是工作良好。但我想知道是否还有其他方法来实现这一点?基本上,我对4个循环所做的是,如果使用SeqGenerate中的字符串/元素找到匹配项,则比较CopyMatrix的键并为其分配一个新值,CopyMatrix是arraylist中的linkedhashmap。我有另一个解决方案,也是一个循环,但它不起作用,所以我坚持使用这个方案,我想知道是否有其他方法可以用更少的循环或其他一些技术来实现这一点

ArrayList<ArrayList<String>> SeqGenerate = new ArrayList<ArrayList<String>>();
ArrayList<LinkedHashMap<String, Double>> copyOfMatrix = new ArrayList<LinkedHashMap<String, DOuble>>();
ArrayList<LinkedHashMap<String, Double>> calcLogProb = new ArrayList<LinkedHashMap<String, DOuble>>();


for (ArrayList<String> getArray: SeqGenerate){
            LinkedHashMap<String, Double> tempVal = new LinkedHashMap<String, Double>();
            for (String getString: getArray){
                for (LinkedHashMap<String, Double> entries: copyOfMatrix){

                    Iterator <String> iterKey = entries.keySet().iterator();
                    Iterator <Double> iterVal = entries.values().iterator();
                        while (iterKey.hasNext()){
                            String keyVal = iterKey.next();
                            Double Value = iterVal.next();

                            if (getString.equals(keyVal)){
                                Double temp = Value;
                                if (temp==0){
                                        temp=0.00000001;
                                    }

                                Double seqVal = Math.abs(Math.log10(temp));                         
                                tempVal.put(keyVal, seqVal);
                            }

                        }   
                }
            }
            calcLogProb.add(tempVal);
        }
ArrayList SeqGenerate=new ArrayList();
ArrayList copyOfMatrix=新的ArrayList();
ArrayList calcLogProb=新的ArrayList();
for(ArrayList getArray:SeqGenerate){
LinkedHashMap tempVal=新LinkedHashMap();
for(字符串getString:getArray){
用于(LinkedHashMap条目:copyOfMatrix){
迭代器iterKey=entries.keySet().Iterator();
迭代器iterVal=entries.values().Iterator();
while(iterKey.hasNext()){
字符串keyVal=iterKey.next();
Double Value=iterVal.next();
if(getString.equals(keyVal)){
双温=值;
如果(温度==0){
温度=0.00000001;
}
Double-seqVal=数学绝对值(数学对数10(温度));
临时值put(keyVal,seqVal);
}
}   
}
}
calcLogProb.add(tempVal);
}
编辑 好的,我试着做的是这样的: SeqGenerate包含这些元素
ArrayList------字符串
(1) Hello World={He el ll lo o_uw Wo或rl ld}

(2) 你好,地球={他会回来的}

Hello World和Hello Earth是SeqGenerate中包含的文本类型的一个示例,但它们存储为两个字符序列,如我所示。 copyOfMatrix包含相同的序列,但我是从另一组句子和文本生成的,但它们总是由两个字符组成的序列,如果找到匹配项,将比较并替换值

所以我知道的唯一比较嵌套循环中元素的方法是生成循环,例如,我将把seqGenerate元素0元素1与copy矩阵中存储的键进行比较。如果我找到匹配项,我将替换该值。希望这足够清楚


谢谢你的时间

好吧,我不打算为您重新编写代码,但我会告诉您,当我看到大量组合的集合和嵌套循环时,我会有点呕吐。这里有一个想法:所有这些集合都可以扩展,这意味着您可以创建自定义类,在每个级别上包含find方法

我唯一的另一个好建议是尝试使用lambdas语言,比如Groovy,它具有更好的处理复杂数据安排的能力


好的,我还有一个想法:使用SQL解决这个问题会更好吗?

好吧,我不会为您重新编写代码,但我会告诉您,当我看到大量组合的集合和嵌套循环时,我会有点呕吐。这里有一个想法:所有这些集合都可以扩展,这意味着您可以创建自定义类,在每个级别上包含find方法

我唯一的另一个好建议是尝试使用lambdas语言,比如Groovy,它具有更好的处理复杂数据安排的能力


好的,我还有一个想法:用SQL解决这个问题会更好吗?

我真的不明白你为什么这么做

Iterator <String> iterKey = entries.keySet().iterator();
Iterator <Double> iterVal = entries.values().iterator();
while (iterKey.hasNext()){
  String keyVal = iterKey.next();
  Double Value = iterVal.next();

  if (getString.equals(keyVal)){
    Double temp = Value;
    if (temp==0){
      temp=0.00000001;
    }

    Double seqVal = Math.abs(Math.log10(temp));                         
    tempVal.put(keyVal, seqVal);
  }
}

我真的不明白你为什么这么做

Iterator <String> iterKey = entries.keySet().iterator();
Iterator <Double> iterVal = entries.values().iterator();
while (iterKey.hasNext()){
  String keyVal = iterKey.next();
  Double Value = iterVal.next();

  if (getString.equals(keyVal)){
    Double temp = Value;
    if (temp==0){
      temp=0.00000001;
    }

    Double seqVal = Math.abs(Math.log10(temp));                         
    tempVal.put(keyVal, seqVal);
  }
}

很难理解你在这里想要完成什么。也许是一个更好的解释和/或一些伪代码?嗨,为你编辑了我的问题。希望现在一切都清楚了。很难理解你在这里想要实现什么。也许是一个更好的解释和/或一些伪代码?嗨,为你编辑了我的问题。希望现在一切都清楚了。谢谢你的回答不,我必须用Java来做这件事,因为我想学习这门语言,加上这是一个摆在我面前的问题。但是我会像你建议的那样研究定制的集合。谢谢你的回答不,我必须使用Java来做这件事,因为我想学习Java语言,而且这是一个为我准备的问题。但是我会按照你的建议来研究定制的集合。嗨,谢谢你分享你的想法,我尝试了你给我的代码,但是它的输出是错误的。但我从你给我的东西中学到了一些东西。我在它们中有一个while循环的原因是我想循环遍历条目(LinkedHashMap)中的所有键和值对。另一个原因是我不确定第三个循环是否能够循环所有键值对条目。为什么要循环所有键值条目,而最多只能找到一个条目?当它所做的只是复制
get
的行为时,这个循环就没有意义了。不管怎样,您能更具体地说明这段代码生成的“错误输出”吗?这些行应该是完全等效的。我在想,因为copyOfMatrix是ArrayList中的LinkedHashMap,所以我还需要创建另一个循环,该循环将遍历copyOfMatrix中所有项的键和值。我想如果我只为copyOfMatrix创建一个循环,它只会比较copyOfMatrix Arraylist中的元素,这是一个包含键和值的序列集合……什么?您在
copyOfEntries
中迭代每个映射,并在每个映射上执行工作。我真的不明白这是怎么回事