Java 根据条件将地图内容放入另一个地图

Java 根据条件将地图内容放入另一个地图,java,hashmap,maps,Java,Hashmap,Maps,我试着寻找这样做的方法,但它们似乎无法解决我的问题 我有一张地图: Map<String,Element> elements = new HashMap<>(); 我该怎么做 您可以利用Java 8执行以下操作: elements.keySet().removeIf(key -> !key.startsWith("W")); 它将删除其密钥不以W开头的每个条目 如果要保留第一张地图,只需先创建另一张地图: Map<String, Element> n

我试着寻找这样做的方法,但它们似乎无法解决我的问题

我有一张地图:

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

我该怎么做

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

elements.keySet().removeIf(key -> !key.startsWith("W"));
它将删除其密钥不以
W
开头的每个条目

如果要保留第一张
地图
,只需先创建另一张
地图

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

newElements.keySet().removeIf(key -> !key.startsWith("W"));
Map newElements=新的HashMap(元素);
newElements.keySet().removeIf(key->!key.startsWith(“W”);

这取决于您的用例是什么。我假设您使用的是Java8

如果您想要一个带有过滤条目的新映射,您可以这样做

Map<String,Element> newElements = elements.entrySet().stream()
    .filter(entry -> entry.getKey().startsWith("W"))
    .collect(Collectors.toMap(Entry::getKey(), Entry::getValue()));
Map 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());
//假设Map newElements=一些适当初始化的Map
elements.entrySet().stream()
.filter(entry->entry.getKey().startsWith(“W”))
.forEach(entry->newElements.put(entry.getKey(),entry.getValue());

如果愿意,您也可以将第一个选项的结果传递到第二个地图上。不过在这种情况下,我倾向于第二个选项。

这对我来说很好:

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());            
        }
    }
}

如果任何键以“W”开头,您想将整个地图放入另一个地图,或者您想检查每个地图条目,如果其键以“W”开头,则只将该条目放入另一个地图?后者。我想放入任何键以“W”开头的键/值对。谢谢您,Jacob。这是一个非常简洁的答案,也是我的第一个答案介绍(我认为)使用Java8。
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