Для решения данной задачи нам необходимо создать классы, представляющие ноутбуки, а также методы для фильтрации ноутбуков по заданным критериям.
Прежде всего, создадим класс `Laptop`, который будет представлять характеристики ноутбука, такие как ОЗУ, объем жесткого диска, операционная система и цвет.
public class Laptop {
private int ram; // ОЗУ
private int hdd; // Объем ЖД
private String os; // Операционная система
private String color; // Цвет
public Laptop(int ram, int hdd, String os, String color) {
this.ram = ram;
this.hdd = hdd;
this.os = os;
this.color = color;
}
// геттеры для доступа к характеристикам
}
Далее, создадим класс `LaptopFilter`, который будет содержать метод для фильтрации ноутбуков по критериям, хранящимся в `Map`.
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class LaptopFilter {
public List<Laptop> filterLaptops(List<Laptop> laptops, Map<String, Object> filters) {
return laptops.stream()
.filter(laptop -> checkFilters(laptop, filters))
.collect(Collectors.toList());
}
private boolean checkFilters(Laptop laptop, Map<String, Object> filters) {
for (Map.Entry<String, Object> entry : filters.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
switch (key) {
case "ram":
if (laptop.getRam() < (int) value) {
return false;
}
break;
case "hdd":
if (laptop.getHdd() < (int) value) {
return false;
}
break;
case "os":
if (!laptop.getOs().equals(value)) {
return false;
}
break;
case "color":
if (!laptop.getColor().equals(value)) {
return false;
}
break;
// Добавить другие критерии, если необходимо
}
}
return true;
}
}
Теперь можно создать список ноутбуков и протестировать фильтрацию:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Laptop> laptops = new ArrayList<>();
laptops.add(new Laptop(8, 512, "Windows", "Black"));
laptops.add(new Laptop(16, 1024, "MacOS", "Silver"));
laptops.add(new Laptop(4, 256, "Linux", "Black"));
LaptopFilter laptopFilter = new LaptopFilter();
Map<String, Object> filters = new HashMap<>();
filters.put("ram", 8);
filters.put("os", "Windows");
List<Laptop> filteredLaptops = laptopFilter.filterLaptops(laptops, filters);
for (Laptop laptop : filteredLaptops) {
System.out.println("Filtered Laptop - RAM: " + laptop.getRam() + ", HDD: " + laptop.getHdd() +
", OS: " + laptop.getOs() + ", Color: " + laptop.getColor());
}
}
}
В данном примере мы создаем список ноутбуков, добавляем фильтр по ОЗУ (8 ГБ) и операционной системе (Windows). Затем проводим фильтрацию и выводим отфильтрованные результаты.
Таким образом, вы можете использовать класс `LaptopFilter` для фильтрации ноутбуков по заданным критериям и выводить результаты, которые соответствуют условиям фильтра. В дальнейшем можно расширить функциональность, добавив больше критериев или условий фильтрации в соответствии с требованиями.