2016-07-27 201 views
-3

如何更改我的代码中For-Each Loop的部分。它应该像这样工作For-Each Loop,Map <String,Map <String,List <String> >>

当我在窗口填写“标记”,然后点击确定(下一阿丽娜等),向下跌破应显示:

[A] 

    [l] 
     - Alina 
    [d] 
     - Adam 
[M] 

    [a] 

     - Mark 

enter image description here

公共类WordsList延伸的ArrayList {

@Override 
public String toString() { 
    if (isEmpty()) { 
     return "[]"; 
    } 
    return String.format("[%s]\n", stream().collect(Collectors.joining(",")));  
    } 
} 

测试类

private Map<String, Map<String, List<String>>> words = new HashMap<>(); 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    String key = ("" + jTextField1.getText().charAt(0)).toUpperCase(); 
    Map<String, List<String>> firstLevel = words.get(key); 
    String value = jTextField1.getText(); 

    if (firstLevel == null) { 
     firstLevel = new HashMap<>(); 
     words.put(key, firstLevel); 
    } 

    List<String> secondLevel = firstLevel.get("" + jTextField1.getText().charAt(1)); 

    if (secondLevel == null) { 
     secondLevel = new ArrayList<>(); 
     firstLevel.put("" + jTextField1.getText().charAt(1), secondLevel); 
    } 

    secondLevel.add(value); 

    jTextArea1.setText(""); 

    for (String keys : words.keySet()) { 
     jTextArea1.append("[" + keys + "]\n");    
     for (String keyss : firstLevel.keySet()) { 
      jTextArea1.append("  " + "[" + keyss + "]\n");     
      for (String keysss : secondLevel) { 
       jTextArea1.append("   " + "-" + keysss + "\n"); 
      } 
     } 
    } 
}         

我在Java也非常初学者,这是我的第一篇文章

+3

*“有人可以帮助我......”*你似乎在寻找导师,这不是要问的地方。如果这种印象是错误的,发布一个[mcve]并提出一个*特定*问题。 –

+0

你为什么重写'ArrayList'的toString?这几乎是默认的实现。 –

+0

此代码似乎按预期工作 –

回答

2

例如,当我把阿丽娜,[A]它的好和[1]和阿丽娜,然后我把马克,我overwrties [ l]到“a”,Alina到“Mark”。只有[A]会留下来,[M]

错就错在for循环:

for (String keys : words.keySet()) { 
    jTextArea1.append("[" + keys + "]\n");    
    for (String keyss : firstLevel.keySet()) { // <-- Here 
     jTextArea1.append("  " + "[" + keyss + "]\n");     
     for (String keysss : secondLevel) { // <-- Here 
      jTextArea1.append("   " + "-" + keysss + "\n"); 
     } 
    } 
} 

而不是遍历firstLevelsecondLevel(您刚才定义的),你应该遍历在地图和列表的相应条目:

(我在这里使用Map.forEach,因为它是一个小更简洁)

words.forEach((c1, map) -> { 
    jTextArea1.append("[" + c1 + "]"); 

    map.forEach((c2, list) -> { 
     jTextArea1.append("  " + "[" + c2 + "]"); 

     list.forEach(name -> jTextArea1.append("   " + "-" + name)); 
    });   
}); 
+0

谢谢你的回应。我使用你的代码,这就是我的https://naforum.zapodaj.net/d8df4706f6ed.jpg.html。 – mIeSo

+0

@mIeSo可能有一些我看不到的其他错误。 [这是它在我的测试程序中的样子](http://ideone.com/iELZel)(在底部)。 –

+0

我会稍后检查我的代码,然后我会试着弄清楚这一点。我会让你知道 – mIeSo

相关问题