Есть четыре класса. Первый класс товаров.
class Good {
String name;
double price;
public Good(String name, double price) {
this.name = name;
this.price = price;
}
}
Второй класс магазин.
class OnlineStore {
String name;
List<Good> goods;
public OnlineStore(String name, List<Good> list) {
this.name = name;
this.goods = list;
}
}
Третий класс сервис поиска товаров.
class ProductSearchSrvice {
List<OnlineStore> store;
public ProductSearchSrvice(List<OnlineStore> store) {
if(store.isEmpty()) {
throw new IllegalArgumentException();
}
}
}
И последний класс, где все происходит.
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", 567.89);
Good Cable_HDMI_2 = new Good("Cable_HDMI", 249.5);
Good Control_panel_2 = new Good("Control_panel", 850.0);
ArrayList listOfMirElectroniki = new ArrayList();
ArrayList listOfHIKVISION = new ArrayList();
ArrayList 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 MirElecroniki = new OnlineStore("Mir Electroniki", listOfMirElectroniki);
OnlineStore HIKVISIOB = new OnlineStore("HIKVISION", listOfHIKVISION);
OnlineStore OLX = new OnlineStore("OLX", listOfOLX);
}
Как это сделать?
raw types
в дженериках, Вместо ArrayList someList = new ArrayList();
пишите ArrayList<Good> someList = new ArrayList<>();
ProductSearchService
после проверки на пустоту списка, все же сделайте присвоение this.store = store;
private
и добавьте get
методы для нихНу и сам метод поиска минимальной цены по товару (с использованием стримов):
public double findMinPriceByGoodName(String goodName) {
return store.stream()
.flatMap(onlineStore -> onlineStore.getGoods().stream())
.filter(good -> good.getName().equals(goodName))
.min(Comparator.comparing(Good::getPrice)).get().getPrice();
}
Если стримы сложно, вот тот же метод с циклом:
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;
}
Если есть требование сделать именно с помощью Iterator
(что конечно менее читаемо и не рекомендуется для использования), в целях изучения например, то вот с итератором:
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);
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я новичок в java, пытаюсь сделать многопользовательскую игруСервер, клиент есть, проблема в другом
Положил изображение в папку "res", но не получается его подгрузитьПри сборке jar файла изображение не отображается
Помогите, пожалуйста, сделать, я уже неделю сижу над этим заданием и просто ничего не получается, так как важным условием еще есть не использовать...