Я пытаюсь проанализировать ключи хэш-карты, поэтому я хочу, чтобы каждые 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(" / ")));
и результат только в одной строке.
Я имею в виду, что это один из способов, но мне нужен лучший способ сделать это, например, попытаться сделать это как можно проще.
Решение, которое я предлагаю, следующее:
Идея состоит в том, чтобы держать счетчик, чтобы знать, когда он кратен трем, и переходить на новую строку.
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
int count = 0; for (String key : map.keySet()) System.out.print((count++ % 3 == 0 ? "\n" : " / ") + key);