Задать вопрос
@Adrenal1ne1

Как правильно сделать выборку из листа?

Добрый день!
Получаю из базы данных таблицу такого вида

Фирма Товар
---------------------
Фирма1 принтер
Фирма1 факс
Фирма1 телефон
Фирма2 картошка
Фирма3 пылесос
Фирма3 блокнот

Как правильно написать обработку этого листа, чтобы получить вывод в консоль вида:
Фирма1 - принтер,факс,телефон
Фирма2 - картошка
Фирма3 - пылесос,блокнот

Мне на ум приходит только перебор в итераторе и сравниваем всё со всем.Помещаем первое название фирмы во временную переменную. Сравниваем элементы листа с этой переменной по названию фирмы, если названия фирм совпадают, то печатает товар в строку. Удаляем строку из листа. И тд.
Может есть какие-то другие оптимальные решения? А то если в таблице 1 000 000 строк, то скорость будет удручающая.
Заранее спасибо.
  • Вопрос задан
  • 163 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@red-barbarian
map = list. stream().collect(groupingBy(Db::getForm)) ;
Если на 8 уже.
Ответ написан
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Наверное, самое правильное будет - получить из базы отсортированный по фирме список. SORT BY. Потом - один проход по этому списку и вывод куда вы там хотите.

Если задача стоит именно со списком, сразу на ум приходят два варианта -
1) Посортировать список по фирме и далее - в один проход. O(nlogn) сложность по времени.
2) Если не особо важен порядок. Идти по списку и складывать элементы в Map<String, List<String>>очевидным образом. O(n) по времени, O(n) по памяти. В конце обойти мапу.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы