2016-08-14 32 views
1

未列出我有以下聲明一個HashMap:取下HashMap的字符串列表

Map<String, Integer> terms = new HashMap<>(); 

和列表如下:

List<String> allTerms = new ArrayList<>(); 

的HashMap和列表包含字符串。

我想刪除存儲在未列出聲明列表中的哈希映射中的所有字符串。 有什麼更好的方法來做到這一點?

+0

沒有提供它不可能說你問的地圖類型的信息。最好還提供關於地圖中條目的商業性質和列表內容的信息。 – mszymborski

+2

'allTerms.forEach(terms :: remove)'。 –

+0

對不起這個錯誤。我只是編輯問題。 – Kittani

回答

0
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 
+0

這是一個'O(n * m)'解決方案,將'List'複製到'Set'將是更聰明的選擇。 –

+0

@BoristheSpider我在想那個解決方案,但是'Set'只會刪除重複的東西,對不對? –

+0

'contains'對於'Set'是'O(1)'。你基本上正在重寫'List.contains',它是'O(n)'。此外,這段代碼是濫用流和lambdas;但現在讓我們忽略它。 –

相關問題