我試圖尋找這樣做的方法,他們似乎並沒有解決我的問題。將地圖內容放入另一個地圖,根據條件
我有一個地圖:
Map<String,Element> elements = new HashMap<>();
我希望把它變成另一種地圖;給定一個簡單的條件:
if (key.charAt(0) == 'W') //Does the start of the key have a "W"
我該怎麼做?
我試圖尋找這樣做的方法,他們似乎並沒有解決我的問題。將地圖內容放入另一個地圖,根據條件
我有一個地圖:
Map<String,Element> elements = new HashMap<>();
我希望把它變成另一種地圖;給定一個簡單的條件:
if (key.charAt(0) == 'W') //Does the start of the key have a "W"
我該怎麼做?
您可以利用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"));
謝謝雅各布。這是一個非常簡潔明瞭的答案,也是我第一次使用Java 8引入(我認爲)。 – AnthonyJ
這取決於你的使用情況是什麼。我會假設你使用的是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第二張圖上,如果您希望。雖然在這種情況下,我會偏向第二種選擇。
這個工作對我蠻好:
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
你想要把整個地圖到另一個地圖,如果*用「W」任何*鍵啓動或你想檢查每個地圖項目,如果它的鑰匙以'W'開頭,只把該項目放入其他地圖? –
後者。我想把任何有一個以'W'開頭的鍵的鍵/值對。 – AnthonyJ