package com.javarush.test.level10.lesson11.home09; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /* Одинаковые слова в списке Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке. Результат нужно представить в виде словаря Map, где первый параметр – уникальная строка, а второй – число, сколько раз данная строка встречалась в списке. Вывести содержимое словаря на экран. В тестах регистр (большая/маленькая буква) не влияет на результат. */ public class Solution { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); ArrayList words = new ArrayList(); for (int i = 0; i < 20; i++) { words.add(reader.readLine()); } Map map = countWords(words); for (Map.Entry pair : map.entrySet()) { System.out.println(pair.getKey() + " " + pair.getValue()); } } public static Map countWords(ArrayList list) { HashMap result = new HashMap(); for (String word: list) { result.put(word , result.containsKey(word) ? result.get(word) + 1: 1); } return result; } } Ребят, помогите понять работу цикла for (String word: list) { result.put(word , result.containsKey(word) ? result.get(word) + 1: 1); } Нашел один из вариантов решения задачи, заинтересовал своей лаконичностью.. но не могу его понять. Не надо на меня плеваться и говорить мол решать надо самому или еще что-то. Я просто хочу разобрать как это работает.
Мои мысли таковы:
цикл по списку слов. в мапу вставляем первое слово на место ключа. затем для вставки значения делаем условие что если среди ключей мапы имеется такой же ключ то значение уже возрастает на 1, иначе просто 1.
но не могу понять, ведь это мы проходим только по первой вставке первого ключа.. я чувствую что знаний не хватает для понимания..
помогите пожалуйста :)