Как изобразить карту > в строковом формате - PullRequest
0 голосов
/ 03 апреля 2020

У меня следующий код, и я хочу дать вывод пользователю в заданном формате, который легко читается.

Как этого добиться с помощью Lambda. Я попробовал функцию карты, но не смог получить результат.

Ниже приведен ожидаемый вывод:

ID1=DEFAULT1 => NewYork

ID1=DEFAULT2 => London

ID1=DEFAULT3 => India


ID2=DEFAULT1 => NewYork

ID2=DEFAULT2 => London

ID2=DEFAULT3 => India

public class Test{


    public static void main(String[] args) {

        Map<String, Map<String, TimePeriod>> map = new HashMap<String, Map<String, Time>>();

        Map<String,TimePeriod> timePeriodMap = new HashMap<>();

        timePeriodMap.put("DEFAULT1",new TimePeriod("NewYork"));
        timePeriodMap.put("DEFAULT2",new TimePeriod("London"));
        timePeriodMap.put("DEFAULT3",new TimePeriod("India"));

        Map<String,Map<String,TimePeriod>> stringMap = new HashMap<>();
        stringMap.put("ID1",timePeriodMap);
        stringMap.put("ID2",timePeriodMap);


    }
}
    class TimePeriod {

        String zone;

        public TimePeriod(String zone) {
            this.zone = zone;
        }

        public String getZone() {
            return zone;
        }

        public void setZone(String zone) {
            this.zone = zone;
        }
    }

Ответы [ 2 ]

3 голосов
/ 03 апреля 2020

Нет необходимости в использовании , потому что это должно быть достигнуто довольно легко с помощью простого процедурного подхода для каждого. Используйте StringJoiner для вывода на печать и LinkedHashMap для сохранения порядка ключей.

StringJoiner joiner = new StringJoiner(System.lineSeparator());

stringMap.forEach((id, timeMap) -> {
    timeMap.forEach((defaultValue, timePeriod) -> {
         joiner.add(String.format("%s=%s => %s", id, defaultValue, timePeriod.getZone()));
    });
});

System.out.println(joiner.toString());

Результат:

ID1=DEFAULT1 => NewYork
ID1=DEFAULT2 => London
ID1=DEFAULT3 => India
ID2=DEFAULT1 => NewYork
ID2=DEFAULT2 => London
ID2=DEFAULT3 => India
0 голосов
/ 03 апреля 2020

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

Вы хотели объявить Map<String, Map<String, TimePeriod>> map?

Если это так, вам не нужна эта вторая строкаMap. Вы можете добавить записи timePeriod в переменную map.

Если вы просто хотите печатать, вы можете сделать это:

Map<String, Map<String, TimePeriod>> map = new HashMap<>();

    Map<String,TimePeriod> timePeriodMap = new HashMap<>();

    timePeriodMap.put("DEFAULT1",new TimePeriod("NewYork"));
    timePeriodMap.put("DEFAULT2",new TimePeriod("London"));
    timePeriodMap.put("DEFAULT3",new TimePeriod("India"));

    map.put("ID1",timePeriodMap);
    map.put("ID2",timePeriodMap);


    map.forEach((id, timePeriods) -> {
        timePeriods.forEach((defaultValue, timePeriod) -> System.out.println(id + "=" + defaultValue + " => " + timePeriod.getZone()));
    });

В интерфейсе Map есть метод forEach, позволяющий выполнять итерацию entrySet , Итерируя «внешний» набор записей карты, а затем итерируя «внутренний» набор записей вложенной карты, вы можете получить желаемый результат.

...