Проанализируйте ключи хэш-карты как 3 ключа на каждой полосе

Я пытаюсь проанализировать ключи хэш-карты, поэтому я хочу, чтобы каждые 3 ключа из хэш-карты отправлялись в виде одной строки, а затем после отправки 3 ключей он поместит «\ n», поэтому он перейдет к следующей строке и поместит еще 3 значения и т.д.... до тех пор, пока ключи хэш-карты не напечатают все.

Пример:

key1 / key2 / key3
key4 / key5 / key6
key7 / key8

Мой код на данный момент:


    Map<String, Integer> map = new HashMap<>();
    map.put("key1", 0); 
    map.put("key2", 1); 
    map.put("key3", 2); 
    map.put("key4", 3); 
    map.put("key5", 4); 
    map.put("key6", 5); 
    map.put("key7", 6); 
    map.put("key8", 7); 
    
    System.out.println(map.keySet().stream().collect(Collectors.joining(" / ")));

и результат только в одной строке.

int count = 0; for (String key : map.keySet()) System.out.print((count++ % 3 == 0 ? "\n" : " / ") + key);
shmosel 06.05.2022 23:46

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

omar ibrahim 07.05.2022 00:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решение, которое я предлагаю, следующее:

Идея состоит в том, чтобы держать счетчик, чтобы знать, когда он кратен трем, и переходить на новую строку.

public static void main(String[] args) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("key1", 0);
        map.put("key2", 1);
        map.put("key3", 2);
        map.put("key4", 3);
        map.put("key5", 4);
        map.put("key6", 5);
        map.put("key7", 6);
        map.put("key8", 7);
        map.put("key9", 8);
        map.put("key10", 9);


        int counter = 1;

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String key = entry.getKey();
            if ((counter)%3==0)
            {
                System.out.println(key);
            }
            else{
                System.out.print(key+" / ");
            }
            counter++;
        }

Вывод следующий:

Примечание: Я перешел с HashMap<>() на LinkedHashMap<>(), потому что HashMap не поддерживает порядок вставки, а LinkedHashMap поддерживает.

Ответ принят как подходящий

Наконец-то я узнаю, что самый простой способ сделать это - только в одной строке:


AtomicInteger counter = new AtomicInteger(0);
 
System.out.println(map.keySet().stream().map(map -> ((counter.getAndAdd(1) % 3 == 0) ? "\n" : " / ") + map).collect(Collectors.joining("")));

Примечание: убедитесь, что я использовал здесь AtomicInteger и получил счетчик как counter.getAndAdd(), а не counter.addAndGet(), что заставило меня через 30 минут задуматься о том, почему он не работает.

спасибо @shmosel, потому что он тот, кто дает код, и я просто меняю несколько вещей, которые делают его только одной строкой.

результат таков:

key1 / key2 / key3
key4 / key5 / key6
key7 / key8 / key9
key10 / key11

Другие вопросы по теме