Как писали выше, нужно отсортировать по районам и комнатам.
Не совсем понял, как вы рассчитали среднюю стоимость квадратного метра, но задача мне показалась интересной и я её попробовал решить.
Ниже то, что у меня получилось. Если ответ был полезен, буду рад за позитивную оценку.
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