未列出我有以下聲明一個HashMap:取下HashMap的字符串列表
Map<String, Integer> terms = new HashMap<>();
和列表如下:
List<String> allTerms = new ArrayList<>();
的HashMap和列表包含字符串。
我想刪除存儲在未列出聲明列表中的哈希映射中的所有字符串。 有什麼更好的方法來做到這一點?
未列出我有以下聲明一個HashMap:取下HashMap的字符串列表
Map<String, Integer> terms = new HashMap<>();
和列表如下:
List<String> allTerms = new ArrayList<>();
的HashMap和列表包含字符串。
我想刪除存儲在未列出聲明列表中的哈希映射中的所有字符串。 有什麼更好的方法來做到這一點?
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
static boolean match = true;
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> map1 = new HashMap<String, Integer>();
List<String> list = Arrays.asList("Test1", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7");
map.put("Test1", 1);
map.put("Test66", 2);
map.put("Test3", 3);
map.put("Test4", 4);
map.put("Test123", 5);
map.forEach((k, v) -> {
match = false;
list.forEach(s -> {
if (k.equals(s))
match = true;
});
if(match)
map1.put(k,v);
});
map = map1;
map.forEach((k,v)->System.out.println(k));
}
}
輸出:
Test1
Test4
Test3
這是一個'O(n * m)'解決方案,將'List'複製到'Set'將是更聰明的選擇。 –
@BoristheSpider我在想那個解決方案,但是'Set'只會刪除重複的東西,對不對? –
'contains'對於'Set'是'O(1)'。你基本上正在重寫'List.contains',它是'O(n)'。此外,這段代碼是濫用流和lambdas;但現在讓我們忽略它。 –
沒有提供它不可能說你問的地圖類型的信息。最好還提供關於地圖中條目的商業性質和列表內容的信息。 – mszymborski
'allTerms.forEach(terms :: remove)'。 –
對不起這個錯誤。我只是編輯問題。 – Kittani