code: private void notifyToListener(ProviderInfoListener listener, ComposeUserData mergedResult) {
  
          if ("".equalsIgnoreCase(mergedResult.getLocalZone()) ||
              DEFAULT_ZONE.equalsIgnoreCase(mergedResult.getLocalZone())) {
              listener.updateProviders(new ProviderGroup(flatComposeData(mergedResult)));
          } else {
              final Map<String, List<ProviderInfo>> zoneData = mergedResult.getZoneData();
  
              List<ProviderGroup> result = new ArrayList<ProviderGroup>();
  
              for (Map.Entry<String, List<ProviderInfo>> dataEntry : zoneData.entrySet()) {
  
                  //localZone 的特殊放到 default 分组一份.为了在目标 zone 不可用的情况下兜底
                  if (dataEntry.getKey().equalsIgnoreCase(mergedResult.getLocalZone())) {
                      result.add(new ProviderGroup(dataEntry.getValue()));
                  }
                  //其他 zone 的正常放
                  result.add(new ProviderGroup(dataEntry.getKey(), dataEntry.getValue()));
  
              }
  
              listener.updateAllProviders(result);
  
          }
      }
docs: 更新一个 listener 的数据