Java中的字典过滤和合并2个HashMap
我有一个映射,它有一个key-ItemType、一个enum和一组项名称(String)
Map<ItemType, Set<String> itemTypesAndNames;
例如,
键:ItemType1,值:a1、a2、a3
键:ItemType2,值:b1、b2、b3
键:ItemType3,值:c1、c2、C3
第二张地图是
Map<String, ItemId> itemNamesAndIds;
例如,
键:a1,值:1234556-434
键:a2,值:4324234-5453
键:b1值:3t5dgsfdfdsf
等等
我想用ItemType和一组ItemTypeID创建一个新映射
Map <ItemType, Set<ItemId>>
例如
键:ItemType1,值:1234556-434,4324234-545
关键字:ItemType2,值:3t5dgsfdfdsf
等等
public class ItemId {
private final String id;
public static ItemId of(String id) {
return new ItemId (id)}
}
}
public enum ItemType {
ITEM_TYPE_1("ItemType1");
ITEM_TYPE_2("ItemType2");
}
# 1 楼答案
这里有一种方法。虽然我使用了一些流处理来准备一些演示数据,但我在最终解决方案中避免了它,以保持处理更高效(基于我的测试),因为我不知道地图的大小
我还修改了
enum
和class
以启用它们首先,创建
itemTypesAndNames
映射印刷品
现在创建
itemNamesAndIds
地图印刷品
创建一个目标映射,简单地迭代类型和名称,创建 如果名称存在于
itemNamesAndIds
映射中,则为该名称提供一个条目computeIfAbsent
如果目标set
尚未出现,则创建该目标打印出类似于
数据对象
# 2 楼答案
Set<String>
中的值应重新映射到Set<ItemId>
(可能只在itemNamesAndIds
映射中保留ids
):更新
如果必须合并具有相同结构的两个映射
Map<Key, Set<Value>>
,可以使用toMap
收集器和合并功能来实现: