需求很简单,就是将从某个接口获取的黑名单
结果,处理为 K-V结构,其中 K是serviceName
,value 是 instanceId
的集合。
黑名单的实体类简化后:
public class BlackListEntity implements Serializable, Cloneable {
private String appName;
private String serviceName;
private String instanceId;
}
代码如下所示
List<BlackListEntity> blackList = blackListService.findBlackList(appNames);
Map<String, Set<String>> result = blackList.stream()
.collect(Collectors.groupingBy(BlackListEntity::getServiceName,
Collectors.mapping(BlackListEntity::getInstanceId, Collectors.toSet())));
这里区别下容易混淆
方法
Collectors.toMap()
是将对个对象转为Map
,结果是 Map
Collectors.mapping
是进行映射
,就是1:1
的实体类,结果是映射后的另外一个对象
还有2个容易混淆
的方式
java.util.stream.Stream.map
java.util.stream.Collectors.mapping
前者处理的是1个,后者是处理的集合。
比如上述代码中,利用了后者处理了 group 后类型为Collection<BlackListEntity>
的value。
大概是这个样子,临时记录,可能不严谨。