@vega2475

Как расчитать для каждого района и количества комнат среднюю стоимость квадратного метра?

В базе данных недвижимости хранится информация о квартирах – район города (строка),
количество комнат, общая площадь, стоимость квартиры.(все эти данные просто в объекте их можно передать с помощью конструктора). На вход в метод решения мы передаем список объектов(квартир)

Пользователь же просто пишет (Имя района кол-во комнат площадь цена) -
Северный 3 40 2000000
Северный 2 35 1500000

Примерно так:
public class Apartment {
     String district;
     int roomQuantity;
     int square;
     int price;
    Apartment(String district, int roomsQuantity, int square, int price){
        this.district = district;
        this.roomQuantity = roomsQuantity;
        this.square = square;
        this.price = price;
    }
}


И потом мы создаем объект (квартиру) заполняем БД
Apartment aps1 = new Apartment("Leninskiy", 5, 120, 3000000);
        Apartment aps2 = new Apartment("Leninskiy", 5, 100, 2000000);
        Apartment aps3 = new Apartment("Leninskiy", 7, 160, 5000000);
        Apartment aps4 = new Apartment("Severny", 3, 70, 1000000);
        Apartment aps5 = new Apartment("Severny", 5, 76, 1100000);
        Apartment aps6 = new Apartment("Severny", 7, 120, 2000000);

        ArrayList<Apartment> apsList = new ArrayList<>();

            apsList.add(aps1);
            apsList.add(aps2);
            apsList.add(aps3);
            apsList.add(aps4);
            apsList.add(aps5);
            apsList.add(aps6);


Необходимо узнать стоимость кв.метра для каждого района и количества комнат. (это все так же должо возвращаться в виде списка объектов List list).

Суть в том что надо взять район и квартиры с тем кол-вом комнат и которые находятся в этом районе и написать для них среднюю цену кв.метра.

Абстрактный вывод примерно такой:
Средняя цена за кв.метр для 5 комнатных в Ленинский район = 18000
Средняя цена за кв.метр для 7 комнатных в Ленинский район = 20000
Средняя цена за кв.метр для 3 комнатных в Северном районе = 15000
и тд

Я просто даже не могу понять как примерно это делать?

В теории конечно можно как-то взять район и взять потом определнное кол-во комнат и по тем квартирам где есть комнаты которые мы выбрали посчитать у них всю стоимость и всю площадь и поделить всю стоимость на всю площадь, но я не знаю как это реализовать ведь БД завист от пользователя и как мне выбирать конкретный район и кол-во комнат?

Подскажите пожалуйста как это делать.
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Я бы сказал так: математическая статистика, генеральная совокупность, выборочный метод. Загуглите эти определения, все станет совсем просто.
Для почитать mathprofi.ru/matematicheskaya_statistika.html (намек, задача про помидоры)
Ответ написан
Комментировать
@My1Name
выбрали посчитать у них всю стоимость и всю площадь и поделить всю стоимость на всю площадь

- Нужно выбрать наименьшую и наибольшую стоимость в районе, предварительно отсортировав по количеству комнат. Затем сравнить метры квадратные и вывести среднее значение стоимости и только потом программировать!
Ответ написан
Комментировать
@thatmaniscool
Как писали выше, нужно отсортировать по районам и комнатам.
Не совсем понял, как вы рассчитали среднюю стоимость квадратного метра, но задача мне показалась интересной и я её попробовал решить.
Ниже то, что у меня получилось. Если ответ был полезен, буду рад за позитивную оценку.
Apartment aps1 = new Apartment("Leninskiy", 5, 120, 3000000);
        Apartment aps2 = new Apartment("Leninskiy", 5, 100, 2000000);
        Apartment aps3 = new Apartment("Leninskiy", 7, 160, 5000000);
        Apartment aps4 = new Apartment("Severny", 3, 70, 1000000);
        Apartment aps5 = new Apartment("Severny", 5, 76, 1100000);
        Apartment aps6 = new Apartment("Severny", 7, 120, 2000000);

        List<Apartment> apsList = new ArrayList<>();

        apsList.add(aps1);
        apsList.add(aps2);
        apsList.add(aps3);
        apsList.add(aps4);
        apsList.add(aps5);
        apsList.add(aps6);

        Map<String, List<Apartment>> districMap = apsList.stream().collect(Collectors.groupingBy(apartment -> {
            return apartment.getDistrict();
        }));

        for (Map.Entry<String, List<Apartment>> entry : districMap.entrySet()){
            String _distric = entry.getKey();
            Map<Integer, List<Apartment>> _rooms = entry.getValue().stream().collect(Collectors.groupingBy(apartment -> {
                return apartment.getRoomQuantity();
            }));

            for(Map.Entry<Integer, List<Apartment>> _entry : _rooms.entrySet()){
                int roomNum = _entry.getKey();
                IntSummaryStatistics meters = _entry.getValue().stream().mapToInt(Apartment::getSquare).summaryStatistics();
                IntSummaryStatistics price = _entry.getValue().stream().mapToInt(Apartment::getPrice).summaryStatistics();
                System.out.println(String.format("Район: %s, комнат: %d, средняя площадь: %f, средняя стоимость метра: %f", _distric, roomNum, meters.getAverage(), (price.getAverage() / meters.getAverage())));
            }
        }

Что вывело:

Район: Severny, комнат: 3, средняя площадь: 70,000000, средняя стоимость метра: 14285,714286
Район: Severny, комнат: 5, средняя площадь: 76,000000, средняя стоимость метра: 14473,684211
Район: Severny, комнат: 7, средняя площадь: 120,000000, средняя стоимость метра: 16666,666667
Район: Leninskiy, комнат: 5, средняя площадь: 110,000000, средняя стоимость метра: 22727,272727
Район: Leninskiy, комнат: 7, средняя площадь: 160,000000, средняя стоимость метра: 31250,000000
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы