驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
随笔:记录一个一气呵成的 Stream 操作
/    

随笔:记录一个一气呵成的 Stream 操作

需求很简单,就是将从某个接口获取的黑名单结果,处理为 K-V结构,其中 K是serviceName,value 是 instanceId 的集合。

黑名单的实体类简化后:

public class BlackListEntity implements Serializable, Cloneable {

    private String appName;

    private String serviceName;

    private String instanceId;
}

代码如下所示

  1. 先从第三方接接口获取内容。
  2. 进行组装
        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。

大概是这个样子,临时记录,可能不严谨。

不积跬步,无以至千里。不积小流,无以成江海。