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