Также обратите внимание, что для получения фактических имен перечислений вы используете функцию .values ​​() класса Enum.

я два окруженияPROD а такжеSTAGING, В среде prod у нас есть три центра обработки данныхABC, DEF а такжеPQR и постановка имеет один центр обработки данныхCORP, В каждом центре обработки данных есть несколько машин, и я определил для них константу, как показано ниже:

// NOTE: I can have more machines in each dc in future
public static final ImmutableList<String> ABC_SERVERS = ImmutableList.of("tcp://machineA:8081", "tcp://machineA:8082");
public static final ImmutableList<String> DEF_SERVERS = ImmutableList.of("tcp://machineB:8081", "tcp://machineB:8082");
public static final ImmutableList<String> PQR_SERVERS = ImmutableList.of("tcp://machineC:8081", "tcp://machineC:8082");

public static final ImmutableList<String> STAGING_SERVERS = ImmutableList.of("tcp://machineJ:8087","tcp://machineJ:8088");

Теперь у меня есть другая константа, определенная в том же классе, которая группируется по DC в список машин для каждого типа среды.

public static final ImmutableMap<Datacenter, ImmutableList<String>> PROD_SERVERS_BY_DC =
  ImmutableMap.<Datacenter, ImmutableList<String>>builder()
      .put(Datacenter.ABC, ABC_SERVERS).put(Datacenter.DEF, DEF_SERVERS)
      .put(Datacenter.PQR, PQR_SERVERS).build();

public static final ImmutableMap<Datacenter, ImmutableList<String>> STAGING_SERVERS_BY_DC =
  ImmutableMap.<Datacenter, ImmutableList<String>>builder()
      .put(Datacenter.CORP, STAGING_SERVERS).build();

Теперь в каком-то другом классе, на основе того, в какой среде я нахожусь(Utils.isProd())Я получаю либоPROD_SERVERS_BY_DC или жеSTAGING_SERVERS_BY_DC.

Map<Datacenter, ImmutableList<String>> machinesByDC = Utils.isProd() ? Utils.PROD_SERVERS_BY_DC : Utils.STAGING_SERVERS_BY_DC;

Теперь я думаю, что это может быть представлено гораздо лучше в некотором роде Enum вместо того, чтобы определять константы, как у меня выше, но я не могу понять, как я могу это сделать? Я начал с этого, но запутался, как у меня может быть один ключ для каждого DC, а затем несколько значений в виде списка машин для этого DC, а затем мне нужно сгруппировать их по среде.

// got confuse on how can I make key (DC) and list of values (machines) for each environment type.
public enum DCToMachines {
  abc(tcp://machineA:8081", "tcp://machineA:8082"), 

  private final List<String> machines;
  private final Datacenter datacenter;
  ...


}

Ответы на вопрос(2)

Ваш ответ на вопрос