JavaRush /Java блог /Архив info.javarush /Не могу понять работу цикла
Sergio131313
11 уровень

Не могу понять работу цикла

Статья из группы Архив info.javarush
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.
но не могу понять, ведь это мы проходим только по первой вставке первого ключа.. я чувствую что знаний не хватает для понимания..
помогите пожалуйста :)
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
KapChook Уровень 19
16 февраля 2015
Ты всё правильно сам написал, только
но не могу понять, ведь это мы проходим только по первой вставке первого ключа…
мы проходим по списку list, а не по вставкам.
Если элемента из списка в мапе нет, то он добавится с значением 1, а если он есть, то новый элемент перезапишет старый (потому что одинаковые ключи) и его значение будет равно значение старого + 1
kolust Уровень 40
16 февраля 2015
цикл називается for each-(тип обекта в списке имя обьекта скоторым будеш оперировать: название списка)
Например есть список ArrayListwords
цикл будет выглядеть так
for(Integer xxx: words)
{
}
цикл будет работать пока не переберет все элементы из words а xxx это имя для отдельного элемента которое ты задаеш сам и в каждой итерации цикла оно является ссылкой на текущий элемент списка(в следующей итерации имя xxx присвойтся новому элементу и так пока все элементы не переберуться)