Как правильно написать обработку этого листа, чтобы получить вывод в консоль вида:
Фирма1 - принтер,факс,телефон
Фирма2 - картошка
Фирма3 - пылесос,блокнот
Мне на ум приходит только перебор в итераторе и сравниваем всё со всем.Помещаем первое название фирмы во временную переменную. Сравниваем элементы листа с этой переменной по названию фирмы, если названия фирм совпадают, то печатает товар в строку. Удаляем строку из листа. И тд.
Может есть какие-то другие оптимальные решения? А то если в таблице 1 000 000 строк, то скорость будет удручающая.
Заранее спасибо.
еще полезней такой пример ConcurrentMap> byGender =
roster
.parallelStream()
.collect(
Collectors.groupingByConcurrent(Person::getGender));
сразу многопоточность
Наверное, самое правильное будет - получить из базы отсортированный по фирме список. SORT BY. Потом - один проход по этому списку и вывод куда вы там хотите.
Если задача стоит именно со списком, сразу на ум приходят два варианта -
1) Посортировать список по фирме и далее - в один проход. O(nlogn) сложность по времени.
2) Если не особо важен порядок. Идти по списку и складывать элементы в Map<String, List<String>>очевидным образом. O(n) по времени, O(n) по памяти. В конце обойти мапу.
"Наверное, самое правильное будет - получить из базы отсортированный по фирме список. SORT BY. Потом - один проход по этому списку и вывод куда вы там хотите." Наверное так было бы правильно. Идею понял, но с реализацией за один проход не совсем мне понятно. Не могли бы вы привести небольшой фрагмент кода ?