Это часть большого кода, в котором есть три четыре класса: OnlineStore, Good, ProductSearchSrvice и класс, где происходят основные действия и, где находиться код ниже), выполняет поиск минимальной цены заданного товара.
public double findMinPriceByGoodName(String goodName) {
double result = 0;
for (Iterator<OnlineStore> iterator = store.iterator(); iterator.hasNext(); ) {
OnlineStore onlineStore = iterator.next();
for (Iterator<Good> iterator1 = onlineStore.getGoods().iterator(); iterator1.hasNext(); ) {
Good good = iterator1.next();
if (good.getName().equals(goodName)) {
if (good.getPrice() < result || result == 0) {
result = good.getPrice();
}
}
}
}
return result;
}
Код ниже это реализация кода выше.
List<OnlineStore> stores = new ArrayList<>();
stores.add(MirElecroniki);
stores.add(HIKVISIOB);
stores.add(OLX);
ProductSearchService service = new ProductSearchService(stores);
double minPrice = service.findMinPriceByGoodName("Tuner");
System.out.println("Min price for Tuner" + minPrice);
public double findMinPriceByGoodName(String goodName) {
// Минимально возможная цена
double result = 0;
// Создаем итератор коллекции store и перебираем его в for, пока есть значения `hasNext()` вернет
// false если значений не будет
for (Iterator<OnlineStore> iterator = store.iterator(); iterator.hasNext(); ) {
// Вытаскиваем из итератора значение
OnlineStore onlineStore = iterator.next();
// Создаем итератор коллекции onlineStore.getGoods() и перебираем его
for (Iterator<Good> iterator1 = onlineStore.getGoods().iterator(); iterator1.hasNext(); ) {
// Вытаскиваем значение
Good good = iterator1.next();
// Если название товара такое же, которое было передано в функцию (аргумент goodName)
if (good.getName().equals(goodName)) {
// Если цена товара меньше текущей минимальной или текущая минимальная равна 0
// (думаю, условие с result == 0 нужно чтобы обновить значение в result в случае,
// когда первый товар имеет цену выше значения в result по умолчанию -- выше 0,
// чтобы иметь реальную цену.
if (good.getPrice() < result || result == 0) {
// Обновляем текущую минимальную цену
result = good.getPrice();
}
}
}
}
// Возвращаем результат
return result;
}
Код можно упростить, если вместо итераторов+for использовать foreach:
public double findMinPriceByGoodName(String goodName) {
double result = 0;
for (OnlineStore onlineStore : store) {
for (Good good : onlineStore.getGoods()) {
if (good.getName().equals(goodName)) {
if (good.getPrice() < result || result == 0) {
result = good.getPrice();
}
}
}
}
return result;
}
Можно нахождение минимальной цены сделать без условий:
public double findMinPriceByGoodName(String goodName) {
Set<Integer> prices = new HashSet<>();
// Или:
// List<Integer> prices = new ArrayList<>();
for (OnlineStore onlineStore : store) {
for (Good good : onlineStore.getGoods()) {
if (good.getName().equals(goodName)) {
prices.add(good.getPrice());
}
}
}
return Collections.min(prices);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости