如何使用相同的键创建两个JavaMap,从第一个Map中删除第二个Map中没有的键的条目

oprakyz7  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(118)

我有两个TreeMap

fisrtMap{
"2022": "11",
"2023": "22"
}

secondMap{
"2022": "33"
}

我想把firstMap写成

fisrtMap{
"2022": "11"
}

我是说,我需要从Map上删除不常用的键。

cgh8pdjw

cgh8pdjw1#

使用两个Map对象的特殊Set密钥

解决方案适用于任何可修改的Map类,而不仅仅是您提到的TreeMap类。
正如Pshemo所评论的,你可以通过👉每个Map的一组键来做到这一点。
首先设置一些示例数据,为了方便起见,我们使用Map.of文字语法制作了一个可修改的Mapx

Map < String, String > x =
        new HashMap <>(
                Map.of(
                        "2022" , "11" ,
                        "2023" , "22"
                )
        );

Map < String, String > y =
        Map.of(
                "2022" , "33"
        );

以集合的形式查看Mapx的键,然后删除该Map中键不存在于第二个集合中的任何条目,第二个集合是第二个Map中的键集合。

x.keySet().retainAll( y.keySet() );

Map::keySet的调用返回Map中包含的键的Set视图。该集合是特殊的,因为它连接到它来自的Map。
该集合支持元素移除,即从Map中移除相应的Map
转储到控制台之前和之后的状态我们的Mapx

System.out.println( "x = " + x );
x.keySet().retainAll( y.keySet() );
System.out.println( "x = " + x );

看看这个code run live at Ideone.com

x = {2023=22, 2022=11}
x = {2022=11}

顺便说一下,如果数据的第一部分是日历年,那么可以使用java.time.Year类。

相关问题