Как определить, есть ли магазин, все товары которого можно купить по ценам, которые дешевле чем рекомендованная цена производителя?

150
04 мая 2019, 22:50

Есть четыре класса. Первый класс товары

class Good {
    private String name;
    private double price;
    public Good(String name, double price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public double getPrice() {
        return price;
    }
}

Второй класс Онлайн Магазин

class OnlineStore {
    private String name;
    List<Good> goods;
    public OnlineStore(String name, List<Good> list) {
        this.name = name;
        this.goods = list;
    }
    public String getName() {
        return name;
    }
    public List<Good> getGoods() {
        return goods;
    }
}

Третий класс, где происходит поиск товара (где уже есть методы поиска товара с минимальной ценной и создание списка магазинов с заданными товарами с минимальной ценной)

class ProductSearchSrvice {
    List<OnlineStore> store;
    public ProductSearchSrvice(List<OnlineStore> store) {
        if(store.isEmpty()) {
            throw new IllegalArgumentException();
        }
        this.store = store;
    }
    public List<OnlineStore> getStore() {
        return store;
    }
    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;
    }
    public List<OnlineStore> makeListOfMinPrices(String goodName){
        double result = 0;
        List<OnlineStore> listOfStores = new ArrayList<OnlineStore>();
        for (OnlineStore store : this.store) {
            for (Good good : store.goods) {
                if (good.getName().equals(goodName)) {
                    if (good.getPrice() < result || result == 0) {
                        result = good.getPrice();
                        listOfStores.add(store);
                    }
                }
            }
        }

        return listOfStores;
    }

}

И четвертый класс, где все задания реализуются

public class Lab102 {
    public static void main(String[] args) {
        Good Tuner = new Good("Tuner", 350.0);
        Good Cable_HDMI = new Good("Cable HDMI", 29.6);
        Good Control_panel = new Good("Cable HDMI", 150.5);
        Good Tuner_1 = new Good("Tuner", 1323.0);
        Good Cable_HDMI_1 = new Good("Control_panel", 470.0);
        Good Control_panel_1 = new Good("Control_panel", 617.0);
        Good Tuner_2 = new Good("Tuner", 267.89);
        Good Cable_HDMI_2 = new Good("Cable HDMI", 19.5);
        Good Control_panel_2 = new Good("Control_panel", 350.0);
        ArrayList<Good> listOfMirElectroniki = new ArrayList<>();
        ArrayList<Good> listOfHIKVISION = new ArrayList<>();
        ArrayList<Good> listOfOLX = new ArrayList<>();
        listOfMirElectroniki.add(Tuner);
        listOfMirElectroniki.add(Cable_HDMI);
        listOfMirElectroniki.add(Control_panel);
        listOfHIKVISION.add(Tuner_1);
        listOfHIKVISION.add(Cable_HDMI_1);
        listOfHIKVISION.add(Control_panel_1);
        listOfOLX.add(Tuner_2);
        listOfOLX.add(Cable_HDMI_2);
        listOfOLX.add(Control_panel_2);
        OnlineStore MirElectroniki = new OnlineStore("Mir Electroniki", listOfMirElectroniki);
        OnlineStore HIKVISION = new OnlineStore("HIKVISION", listOfHIKVISION);
        OnlineStore OLX = new OnlineStore("OLX", listOfOLX);
        //Задание №1 типизированный итератор
        System.out.println("Задание №1 типизированный итератор");
        List<OnlineStore> stores = new ArrayList<>();
        stores.add(MirElectroniki);
        stores.add(HIKVISION);
        stores.add(OLX);
        ProductSearchSrvice service = new ProductSearchSrvice(stores);
        double minPrice = service.findMinPriceByGoodName("Tuner");
        System.out.println("Min price for Tuner " + minPrice);
        double minPrice_1 = service.findMinPriceByGoodName("Cable HDMI");
        System.out.println("Min price for Cable HDMI " + minPrice_1);
        double minPrice_2 = service.findMinPriceByGoodName("Control_panel");
        System.out.println("Min price for Control_panel " + minPrice_2);
        //Задание №2 цикл for-each
        System.out.println(" ");
        System.out.println("Задание №2 цикл for-each");
        List<OnlineStore> onstore = new ArrayList<OnlineStore>();
        onstore = service.makeListOfMinPrices("Tuner");
        for(OnlineStore store: onstore){
            System.out.println("List of store (Tuner): " + store.getName());
        }
        onstore = service.makeListOfMinPrices("Cable HDMI");
        for(OnlineStore store_1: onstore){
            System.out.println("List of store (Cable HDMI): " + store_1.getName());
        }
        onstore = service.makeListOfMinPrices("Control_panel");
        for(OnlineStore store_2: onstore){
            System.out.println("List of store (Control_panel): " + store_2.getName());
        }
        //Задание №3 нетипизированный оператор
        System.out.println(" ");
        System.out.println("Задание №3 нетипизированный итератор");
    }

}

Как это сделать с помощью нетипизированного итератора?

Answer 1

Класс ProductSearchSrvice

...
public OnlineStore findStoreWithRecommendedPrices(double[] recommendedPrices) {
    OnlineStore onlineStore = null;
    for (Iterator iterator = store.iterator(); iterator.hasNext(); ) {
        onlineStore = (OnlineStore) iterator.next();
        for (Iterator iterator1 = onlineStore.getGoods().iterator(); iterator1.hasNext(); ) {
            Good good = (Good) iterator1.next();
            switch (good.getName()) {
                case "Tuner":
                    if (good.getPrice() < recommendedPrices[0]) {
                        break;
                    }
                    break;
                case "Cable HDMI":
                    if (good.getPrice() < recommendedPrices[1]) {
                        break;
                    }
                    break;
                case "Control_panel":
                    if (good.getPrice() < recommendedPrices[2]) {
                        break;
                    }
                    break;
            }
        }
    }
    return onlineStore;
}

Вызов из Lab102:

        //Задание №3 нетипизированный оператор
        System.out.println(" ");
        System.out.println("Задание №3 нетипизированный итератор");
        double[] recommendedPrices = {300, 20, 400}; // [0]-Tuner, [1]-Cable HDMI, [2]-Control_panel
        OnlineStore onlineStore = service.findStoreWithRecommendedPrices(recommendedPrices);
        System.out.println("onlineStore with recommended prices: " + onlineStore.getName());
READ ALSO
HashMap. Вывод значения по ключу [закрыт]

HashMap. Вывод значения по ключу [закрыт]

В HashMap хрянятся ключ-значение, пользователь вводит ключ, программа выводит значениеКак это реализовать?

153
Selenium &amp; linkedin, как написать скрипт?

Selenium & linkedin, как написать скрипт?

Появилось задание написать скрипт на Java & Selenium для Linkedin, чтобы автоматически добавлять в друзья всех подряд людей отображающихся в списке...

161
Spring validation. Не подтягиваются сообщения из message.propierties

Spring validation. Не подтягиваются сообщения из message.propierties

Всем привет! Решил разобраться с валидацией и прикрутить к своему учебному проекту проверку данных при регистрации пользователя

176
Какая разница между execute() и submit() у ExecutorService?

Какая разница между execute() и submit() у ExecutorService?

У ExecutorService есть два метода:

161