我可以使用 java 流 api 按值对象中的字段对地图进行分组,然后创建一个以字段为键、原始键为值的新地图
Can I use java streams api to group a map by a field in a value object and then create a new map with field as a key and original key as value
我有以下地图:
Map<String, ImageMetaData> metadataMap = new HashMap<>();
代表以下JSON数据:
{
"1126901": {
"externalRefID": "1126901",
"docTypeKey": "10001-account",
"imageKey": "20100203SESS20000300001",
"scandate": "2010-02-03",
},
"1126902": {
"externalRefID": "1126902",
"docTypeKey": "10002-sig",
"imageKey": "20100203SESS20000300004",
"scandate": "2010-02-03",
}
}
和 ImageMetaData.java 看起来像这样:
@Data
public class ImageMetaData {
private String docTypeKey;
private String externalRefID;
private String imageKey;
private String scandate;
}
有人可以建议我如何使用流将 metadataMap
转换为:
Map<String, Collection<String>> metadataMap = new HashMap<>();
其中键都是唯一的 docTypeKey
(如 10001-account
),值是原始地图中键的集合(如 1126901
),其值 ImageMetaData
对象有相应的 docTypeKey
(如 10001-account
)。
会回答我的问题,因为我很快就找到了答案:
metadataMap.values().stream().collect(Collectors.groupingBy(metadata -> metadata.getDocTypeKey()));
我有以下地图:
Map<String, ImageMetaData> metadataMap = new HashMap<>();
代表以下JSON数据:
{
"1126901": {
"externalRefID": "1126901",
"docTypeKey": "10001-account",
"imageKey": "20100203SESS20000300001",
"scandate": "2010-02-03",
},
"1126902": {
"externalRefID": "1126902",
"docTypeKey": "10002-sig",
"imageKey": "20100203SESS20000300004",
"scandate": "2010-02-03",
}
}
和 ImageMetaData.java 看起来像这样:
@Data
public class ImageMetaData {
private String docTypeKey;
private String externalRefID;
private String imageKey;
private String scandate;
}
有人可以建议我如何使用流将 metadataMap
转换为:
Map<String, Collection<String>> metadataMap = new HashMap<>();
其中键都是唯一的 docTypeKey
(如 10001-account
),值是原始地图中键的集合(如 1126901
),其值 ImageMetaData
对象有相应的 docTypeKey
(如 10001-account
)。
会回答我的问题,因为我很快就找到了答案:
metadataMap.values().stream().collect(Collectors.groupingBy(metadata -> metadata.getDocTypeKey()));