Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从列表中未列出的HashMap中删除字符串_Java - Fatal编程技术网

Java 从列表中未列出的HashMap中删除字符串

Java 从列表中未列出的HashMap中删除字符串,java,Java,我有一个包含以下声明的hashMap: Map<String, Integer> terms = new HashMap<>(); Map terms=newhashmap(); 以及下列名单: List<String> allTerms = new ArrayList<>(); List allTerms=new ArrayList(); hashMap和列表包含字符串 我想删除hashMap中存储的所有未在声明列表中列出的字符串。 更好

我有一个包含以下声明的hashMap:

Map<String, Integer> terms = new HashMap<>();
Map terms=newhashmap();
以及下列名单:

List<String> allTerms = new ArrayList<>();
List allTerms=new ArrayList();
hashMap和列表包含字符串

我想删除hashMap中存储的所有未在声明列表中列出的字符串。
更好的方法是什么?

如果不提供地图的类型信息,就无法说出您的要求。最好还提供有关地图中条目的业务性质和列表内容的信息。
allTerms.forEach(terms::remove)
。对于此错误,我深表歉意。我只是编辑了问题。学校作业对吗?你应该自己尝试学习。如果不提供地图的类型信息,就不可能说出你的要求。最好还提供有关地图中条目的业务性质和列表内容的信息。
allTerms.forEach(terms::remove)
。对于此错误,我深表歉意。我只是编辑了问题。学校作业对吗?你应该自己尝试学习。这是一个
O(n*m)
解决方案,将
列表
复制到
集合
将是一个更明智的选择。@Boristeider我在考虑这个解决方案,但是
集合
只会删除重复的,对吗?
包含
对于
集合
来说是
O(1)
。您实际上是在重写
列表。包含
,即
O(n)
。此外,该代码是对流和lambda的滥用;但是现在让我们忽略它。@Kittani我知道它的工作原理,但是看看Boris的解决方案。这是一个
O(n*m)
解决方案,将
列表
复制到
集合
将是一个更明智的选择。@Boristeider我正在考虑这个解决方案,但是
集合
只会删除重复项,对吗?
包含
对于
集合
O(1)
。您实际上是在重写
列表。包含
,即
O(n)
。此外,该代码是对流和lambda的滥用;“但现在我们还是忽略它吧。”基塔尼我知道它是有效的,但看看鲍里斯的解决方案。
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