2017-04-10 57 views
1

我試圖尋找這樣做的方法,他們似乎並沒有解決我的問題。將地圖內容放入另一個地圖,根據條件

我有一個地圖:

Map<String,Element> elements = new HashMap<>(); 

我希望把它變成另一種地圖;給定一個簡單的條件:

if (key.charAt(0) == 'W') //Does the start of the key have a "W" 

我該怎麼做?

+0

你想要把整個地圖到另一個地圖,如果*用「W」任何*鍵啓動或你想檢查每個地圖項目,如果它的鑰匙以'W'開頭,只把該項目放入其他地圖? –

+0

後者。我想把任何有一個以'W'開頭的鍵的鍵/值對。 – AnthonyJ

回答

1

您可以利用Java的8執行以下操作:

elements.keySet().removeIf(key -> !key.startsWith("W")); 

它刪除其關鍵不W開始的每個條目。

如果您想保留第一Map,只需創建另一個Map第一:

Map<String, Element> newElements = new HashMap<>(elements); 

newElements.keySet().removeIf(key -> !key.startsWith("W")); 
+1

謝謝雅各布。這是一個非常簡潔明瞭的答案,也是我第一次使用Java 8引入(我認爲)。 – AnthonyJ

0

這取決於你的使用情況是什麼。我會假設你使用的是Java 8

如果你想與過濾條目的新地圖,你可以做

Map<String,Element> newElements = elements.entrySet().stream() 
    .filter(entry -> entry.getKey().startsWith("W")) 
    .collect(Collectors.toMap(Entry::getKey(), Entry::getValue())); 

如果您已經有其他的地圖,你只是想添加條目它,你可以使用:

//assuming Map<String,Element> newElements = some appropriately initialized map 
elements.entrySet().stream() 
    .filter(entry -> entry.getKey().startsWith("W")) 
    .forEach(entry -> newElements.put(entry.getKey(), entry.getValue()); 

您也可以通過第一種選擇的結果中的putAll第二張圖上,如果您希望。雖然在這種情況下,我會偏向第二種選擇。

0

這個工作對我蠻好:

import java.util.HashMap; 
import java.util.Map; 

public class Main { 

    public static void main(String args[]) 
    { 
     Map<String,String> elements = new HashMap<>(); 
     Map<String,String> elements2 = new HashMap<>();//the second map 
     elements.put("A", new String("A")); 
     elements.put("B", new String("B")); 
     elements.put("W1", new String("W1")); 
     elements.put("W2", new String("W2")); 


     for (Map.Entry<String, String> entry : elements.entrySet()) 
     { 
      if(entry.getKey().charAt(0) == 'W') 
       elements2.put(entry.getKey(), entry.getValue()); 
     } 

     for (Map.Entry<String, String> entry : elements2.entrySet()) 
     { 
      //printing the elements of the second map 
      System.out.println(entry.getKey() + "/" + entry.getValue());    
     } 
    } 
} 

給下面的輸出:

W1/W1 
W2/W2 
相關問題