我可以使用 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()));