Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
StepFather322
5 / 4 / 4
Регистрация: 07.10.2017
Сообщений: 102
Завершенные тесты: 1
1

Использование stream c коллекциями

13.02.2020, 16:31. Просмотров 1024. Ответов 9

У меня есть ArrayList объектов House:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.company;
 
import java.io.Serializable;
 
public class House implements Comparable<House>, Serializable {
 
    private static final long serialVersionUID = 1L;
 
    private int id;
    private int number;
    private int area;
    private int floor;
    private int roomsAmount;
    private String street;
 
    public House() {
    }
 
    public House(int id, int number, int area, int floor, int roomsAmount, String street) {
        this.id = id;
        this.number = number;
        this.area = area;
        this.floor = floor;
        this.roomsAmount = roomsAmount;
        this.street = street;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
    public int getArea() {
        return area;
    }
 
    public void setArea(int area) {
        this.area = area;
    }
 
    public int getFloor() {
        return floor;
    }
 
    public void setFloor(int floor) {
        this.floor = floor;
    }
 
    public int getRoomsAmount() {
        return roomsAmount;
    }
 
    public void setRoomsAmount(int roomsAmount) {
        this.roomsAmount = roomsAmount;
    }
 
    public String getStreet() {
        return street;
    }
 
    public void setStreet(String street) {
        this.street = street;
    }
 
    @Override
    public String toString() {
        return "id: " + id +
                ", Номер квартиры: " + number +
                ", Площадь: " + area +
                ", Этаж: " + floor +
                ", Количество квартир на этаже: " + roomsAmount +
                ", Улица: '" + street + '\'';
    }
 
    @Override
    public int compareTo(House o) {
        return area-o.getArea();
    }
}

Ну и сама коллекция:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
        ArrayList<House> arr = new ArrayList<House>();
        arr.add(new House(1, 2, 3, 4, 5, "Andreeva"));
        arr.add(new House(2, 5, 16, 7, 24, "Sovetskaya"));
        arr.add(new House(3, 2, 16, 1, 5, "Pushkinskaya"));
        arr.add(new House(4, 192, 17162, 855, 42, "asd)"));
        arr.add(new House(5, 112, 166, 15, 32, "dsa)"));
        arr.add(new House(6, 162, 515, 525, 18, "dsss)"));
        arr.add(new House(7, 112, 17112, 95, 22, "Joasphdqea)"));

Мне нужно используя Stream для каждого этажа получить список квартир(Домов(объектов House)).
То есть в результат у меня должна получиться Map<Intege,List<House>>. Я примерно понимаю как работает стрим, что это поток данных из коллеции и их можно фильтровать и т.д. Но я не понимаю как этот поток отфильтровать если у меня значение это лист и не понимаю как в итоге это все собрать в 1 Map. Спасибо
1
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2020, 16:31
Ответы с готовыми решениями:

Работа с коллекциями stream api java
Есть список строк List&lt;String&gt; y, Из данного списка я создаю карту ...

Использование Generics с коллекциями
Всегда ли нужно указывать тип данных хранимых в коллекции с помощью Generics? List&lt;Integer&gt; ints...

Работа с коллекциями
Здравствуйте возникла такая проблема: Допустим есть класс студент который содержит имя, фамилию и...

Задача с коллекциями
Необходимо сделать так, чтобы чтобы можно было сразу за один ввод данных в цикле осуществить поиск...

Работа с коллекциями!
Надо написать программу для выборочного копирования из списка с к-го элемента n штук.использовал...

9
HighPredator
5958 / 2085 / 736
Регистрация: 10.12.2010
Сообщений: 5,908
Записей в блоге: 3
13.02.2020, 17:21 2
Лучший ответ Сообщение было отмечено StepFather322 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Main {
    public static void main(String[] args) {
        ArrayList<House> houses = new ArrayList<House>();
        houses.add(new House(1, 2, 3, 4, 5, "Andreeva"));
        houses.add(new House(2, 5, 16, 7, 24, "Sovetskaya"));
        houses.add(new House(3, 2, 16, 1, 5, "Pushkinskaya"));
        houses.add(new House(4, 192, 17162, 855, 42, "asd)"));
        houses.add(new House(5, 112, 166, 15, 32, "dsa)"));
        houses.add(new House(6, 162, 515, 525, 18, "dsss)"));
        houses.add(new House(7, 112, 17112, 95, 22, "Joasphdqea)"));
        houses.add(new House(2, 41, 16, 7, 55, "4-ja Sovetskaya")); // to get actual list on 7
 
        Map<Integer, List<House>> map = houses.stream()
                .collect(Collectors.groupingBy(House::getFloor));
 
        map.entrySet().forEach(System.out::println);
    }
}
0
StepFather322
5 / 4 / 4
Регистрация: 07.10.2017
Сообщений: 102
Завершенные тесты: 1
13.02.2020, 17:33  [ТС] 3
HighPredator, КАК? Решение это круто, но толку от него 0 если я не знаю как это работает. Не могли бы вы, пожалуйста, описать в 2 словах каким образом это работает? Я совсем не понимаю как collect понимает что в ключ нужно положить этаж, а в лист все дома у которых такой этаж. Или то что я описал предыдущим предложением выполняет метод groupingBy?
0
xoraxax
2251 / 1983 / 579
Регистрация: 05.07.2013
Сообщений: 9,449
Завершенные тесты: 2
13.02.2020, 23:31 4
или может надо открыть документацию и прочитать например?
1
Aviz__
1211 / 978 / 226
Регистрация: 17.02.2014
Сообщений: 5,224
14.02.2020, 09:16 5
Цитата Сообщение от StepFather322 Посмотреть сообщение
Решение это круто, но толку от него 0 если я не знаю как это работает
ты уверен, что HighPredator, профессиональный преподаватель?!)) толку от его примера ноль, лично для тебя, но слава всевышнему, это публичный форум. другие люди, которые умеют пользоваться поиском, найдут его пример и поймут, что есть какая-то магия, и что можно почитать вот тут https://annimon.com/article/2778, и все понять.
2
Goongala
Модератор
826 / 448 / 153
Регистрация: 18.08.2013
Сообщений: 1,700
Записей в блоге: 2
14.02.2020, 10:52 6
Aviz__, ну, не знаю, профессиональный ли, но объяснять он умеет очень даже хорошо
0
Aviz__
1211 / 978 / 226
Регистрация: 17.02.2014
Сообщений: 5,224
14.02.2020, 12:58 7
Цитата Сообщение от Gungala Посмотреть сообщение
он умеет очень даже хорошо
как правило, кодом)). на мой взгляд, претензия StepFather322, что он не понимает кода, совершенно не обоснована.
0
HighPredator
5958 / 2085 / 736
Регистрация: 10.12.2010
Сообщений: 5,908
Записей в блоге: 3
17.02.2020, 10:26 8
Цитата Сообщение от StepFather322 Посмотреть сообщение
Не могли бы вы, пожалуйста, описать в 2 словах каким образом это работает?
Начиная с какого момента вам непонятно?
0
StepFather322
5 / 4 / 4
Регистрация: 07.10.2017
Сообщений: 102
Завершенные тесты: 1
17.02.2020, 15:57  [ТС] 9
HighPredator, в статье которую предоставили выше есть объяснение: "groupingBy​(Function classifier, Supplier mapFactory, Collector downstream)
Группирует элементы по критерию, сохраняя результат в Map." Прочитав свой вопрос еще раз пару раз, я подумал что глупый вопрос какой то наверное и вряд ли можно это как то объяснить, но все же мне не понятно как метод groupingBy понимает что ему в ключ нужно положить значение критерия, а в лист объекты с этим значением. Вопрос глупый, наверное потому что, мой вопрос описывает собственно принцип работы метода и больше объяснять нечего.
0
HighPredator
5958 / 2085 / 736
Регистрация: 10.12.2010
Сообщений: 5,908
Записей в блоге: 3
17.02.2020, 16:40 10
Хорошо. Но вот вам на всякий случай про групингБай: https://habr.com/ru/post/348536/
Может яснее на русских примерах станет
2
17.02.2020, 16:40
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2020, 16:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с коллекциями.
Даны: массив А из 5 целых, массив Б из 4 целых. Создать из массивов множества МА и МБ и получить...

Работа с коллекциями джава
Как добавлять объекты в коллекция с помощью своих методов? package С; import...

Небольшие конфузы с коллекциями (HashMap)
Здравствуйте, форумчане! Возникли небольшие проблемы с коллекциями и их применением.. Написал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.