Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133

TreeMap поиск по полю объекта

09.03.2018, 02:01. Показов 2847. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток

Не выходит сделать следующее:
Найти рейсы «Minsk - Varshava» и вывести их.
Удалить из коллекции полеты из города Gomel.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Flight flight1 = new Flight("252-555-7", "Moscow", "Minsk", "5", false);
        Flight flight2 = new Flight("252-545-7", "NY", "Minsk", "10", true);
        Flight flight3 = new Flight("252-525-7", "Minsk", "Varshava", "3", true);
        Flight flight4 = new Flight("252-535-7", "Gomel", "Moscow", "2", true);
 
        Map<Integer, Flight> treeMap = new TreeMap<>();
        treeMap.put(1, flight1);
        treeMap.put(2, flight2);
        treeMap.put(3, flight3);
        treeMap.put(4, flight4);
 
        for(Map.Entry e : treeMap.entrySet()){
 
            System.out.println(e.getKey()+" "+ e.getValue());
 
        }
Добавлено через 2 часа 45 минут
Вот как решил. Но уверен, что это неоптимально

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
 System.out.println("Найти рейсы «Minsk - Varshava» и вывести их.");
        for (Flight flight : treeMap.values()) {
            if (flight.getFrom().equals("Minsk") && flight.getTo().equals("Varshava")) {
                System.out.println(flight);
            }
        }
 
        int hash = 0;
        System.out.println("Удалить из коллекции полеты из города Gomel.");
        for (Flight flight : treeMap.values()) {
            if (flight.getFrom().equals("Gomel")) {
                hash = flight.hashCode();
 
            }
        }
 
        Integer q = 0;
        for (Map.Entry e : treeMap.entrySet()) {
 
 
            if (e.getValue().hashCode() == hash) {
 
               q = (Integer) e.getKey();
               // treeMap.remove(q); - java.util.ConcurrentModificationException (модификация коллекции во время прохода по ней)
            }
        }
 
        treeMap.remove(q);
 
        System.out.println("Вывод коллекции после удаления полетов из Гомеля:");
        for (Map.Entry e : treeMap.entrySet()) {
 
            System.out.println(e.getKey() + " " + e.getValue());
 
        }
Добавлено через 16 секунд
Вот как решил. Но уверен, что это неоптимально

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
 System.out.println("Найти рейсы «Minsk - Varshava» и вывести их.");
        for (Flight flight : treeMap.values()) {
            if (flight.getFrom().equals("Minsk") && flight.getTo().equals("Varshava")) {
                System.out.println(flight);
            }
        }
 
        int hash = 0;
        System.out.println("Удалить из коллекции полеты из города Gomel.");
        for (Flight flight : treeMap.values()) {
            if (flight.getFrom().equals("Gomel")) {
                hash = flight.hashCode();
 
            }
        }
 
        Integer q = 0;
        for (Map.Entry e : treeMap.entrySet()) {
 
 
            if (e.getValue().hashCode() == hash) {
 
               q = (Integer) e.getKey();
               // treeMap.remove(q); - java.util.ConcurrentModificationException (модификация коллекции во время прохода по ней)
            }
        }
 
        treeMap.remove(q);
 
        System.out.println("Вывод коллекции после удаления полетов из Гомеля:");
        for (Map.Entry e : treeMap.entrySet()) {
 
            System.out.println(e.getKey() + " " + e.getValue());
 
        }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2018, 02:01
Ответы с готовыми решениями:

Поиск максимального значения в TreeMap
Здравствуйте, возник вопрос как найти максимальный элемент значения в Map, точней есть ли для етого статический метод какой-то или надо...

Поиск в контейнере объекта по полю
Как можно в контейнере QList найти объект по значению поля, ведь indexOf() ищет только по объекту?

Поиск объекта в коллекции по полю string
Так и звучит задание, но реализовать - никак. Создаю коллекцию ArrayList. Хочу искать объект через BinarySearch(), но для этого нужно...

11
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
09.03.2018, 11:14
Цитата Сообщение от robotcode Посмотреть сообщение
Вот как решил
Что ты решил? Добавь в свой map ещё один полёт из Гомеля и посмотри, что получится.
0
 Аватар для robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
09.03.2018, 11:22  [ТС]
korvin_, Если добавлю ещё один полет из Гомеля, то добавлю ещё колекцию куда буду записывать хэшкоды и через цикл буду их подставлять в treemap.remove() и удалять.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
09.03.2018, 11:45
Цитата Сообщение от robotcode Посмотреть сообщение
то добавлю ещё колекцию
Ну так добавь!

Цитата Сообщение от robotcode Посмотреть сообщение
куда буду записывать хэшкоды
Зачем записывать хэшкоды? Зачем тебе вообще вся эта манипуляция с хэшкодами? Почему бы в первом же цикле поиска полётов из Гомеля не записывать сразу ключ?
1
 Аватар для robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
09.03.2018, 21:39  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Почему бы в первом же цикле поиска полётов из Гомеля не записывать сразу ключ?
Не понимаю как записать сразу ключ
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
09.03.2018, 22:00
Цитата Сообщение от robotcode Посмотреть сообщение
Не понимаю как записать сразу ключ
Так же, как и хэшкод, только ключ.
0
 Аватар для robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
09.03.2018, 22:04  [ТС]
korvin_, так, к сожалению, не работает
Java
1
2
3
4
5
6
7
 Integer q=null;
        System.out.println("Удалить из коллекции полеты из города Gomel.");
        for (Flight flight : treeMap.values()) {
            if (flight.getFrom().equals("Gomel")) {
                q = flight.getKey();
            }
        }
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
09.03.2018, 22:19
Цитата Сообщение от robotcode Посмотреть сообщение
так, к сожалению, не работает
Естественно. Но тебе же удавалось как-то ключ получить ранее.
0
 Аватар для robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
09.03.2018, 22:29  [ТС]
korvin_, я вкурсе, но не получается все это связать в одно целое
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
10.03.2018, 01:12
Лучший ответ Сообщение было отмечено robotcode как решение

Решение

robotcode, грубо, в первом приближении можно чего-то такое набросать:
Кликните здесь для просмотра всего текста
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
class Flight {
    String name;
    String from;
    String go;
    int numberFlight;
    boolean freePlaces;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getFrom() {
        return from;
    }
 
    public void setFrom(String from) {
        this.from = from;
    }
 
    public String getGo() {
        return go;
    }
 
    public void setGo(String go) {
        this.go = go;
    }
 
    public int getNumberFlight() {
        return numberFlight;
    }
 
    public void setNumberFlight(int numberFlight) {
        this.numberFlight = numberFlight;
    }
 
    public boolean isFreePlaces() {
        return freePlaces;
    }
 
    public void setFreePlaces(boolean freePlaces) {
        this.freePlaces = freePlaces;
    }
 
    public Flight(String name, String from, String go, int numberFlight, boolean freePlaces) {
        this.name = name;
        this.from = from;
        this.go = go;
        this.numberFlight = numberFlight;
        this.freePlaces = freePlaces;
    }
 
    public String toString() {
        return new String("Рейс №\t" + numberFlight + "\tпо маршруту\t" + from + "\t-\t" + go + "\t( " + name + ")");
    }
}
 
class AddedAndRemove {
    static Map<Integer, Flight> map;
 
    public static void addedFlight() {
        map = new TreeMap<>();
        map.put(1, new Flight("252-555-7", "Moscow", "Minsk", 5, false));
        map.put(2, new Flight("252-545-7", "NY", "Minsk", 10, true));
        map.put(3, new Flight("252-565-7", "Gomel", "Pinsk", 12, true));
        map.put(4, new Flight("252-525-7", "Minsk", "Varshava", 3, true));
        map.put(5, new Flight("252-535-7", "Gomel", "Minsk", 2, false));
    }
 
    public static void showMap() {
        for (Map.Entry<Integer, Flight> pair : map.entrySet()) {
            Integer number = pair.getKey();
            String name = pair.getValue().toString();
            System.out.println(number + " - " + name);
        }
    }
 
    public static void deleting(String whatToDelete) {
        for (Iterator<Map.Entry<Integer, Flight>> iterator = map.entrySet().iterator(); iterator.hasNext();){
            Map.Entry<Integer, Flight> flight = iterator.next();
            if(flight.getValue().getFrom().equalsIgnoreCase(whatToDelete)){
                iterator.remove();
            }
        }
    }
 
    public static void findGetGo(String where) {
        for (Map.Entry<Integer, Flight> pair : map.entrySet()) {
            Flight name = pair.getValue();
            if (name.getGo().equalsIgnoreCase(where)) {
                System.out.println("В " + where.toUpperCase() + " " + name.toString());
            }
        }
    }
 
    public static void main(String[] args) {
        addedFlight();
        System.out.println("Исходное:");
        showMap();
        System.out.println("В Варшаву:");
        findGetGo("varshava");
        System.out.println("Удалили Гомельские:");
        deleting("gomel");
        showMap();
    }
}

Ну а дальше уже напильник в руки и допиливать. Внимание на безопасное удаление из Map'ы, к чему уже подталкивали,
советуя:
Цитата Сообщение от korvin_ Посмотреть сообщение
Добавь в свой map ещё один полёт из Гомеля и посмотри, что получится
1
 Аватар для robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 133
10.03.2018, 20:57  [ТС]
Спасибо большое
достаточно было б только этой части кода :

Java
1
2
3
4
5
6
7
8
public static void deleting(String whatToDelete) {
        for (Iterator<Map.Entry<Integer, Flight>> iterator = map.entrySet().iterator(); iterator.hasNext();){
            Map.Entry<Integer, Flight> flight = iterator.next();
            if(flight.getValue().getFrom().equalsIgnoreCase(whatToDelete)){
                iterator.remove();
            }
        }
    }
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
10.03.2018, 21:08
robotcode, а про напильник забыли? Ведь можно же допилить... Печально это всё... Весь этот код можно выразить куда как приличнее:
Java
1
2
3
    public static void deleting(String whatToDelete) {
        map.entrySet().removeIf(from -> from.getValue().getFrom().equalsIgnoreCase(whatToDelete));
    }
Правда же лучше? Дерзайте, удачи!..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2018, 21:08
Помогаю со студенческими работами здесь

Поиск по массиву списков по string полю объекта
Здравствуйте. У меня есть массив списков: public static List&lt;Bee&gt; honeycomb = new List&lt;Bee&gt;; public static List&lt;Bee&gt; comb = new...

Обращение к полю объекта
Доброго времени суток. Реализую класс для работы с сокетами (для общего развития). class ServerSocket { public: ServerSocket(); ...

Доступ к полю объекта в ArrayList
Здравствуйте, у меня есть ArrayList объектов Device(); Как обратиться к полям объекта Device() в ArrayList? public class Device { ...

Сортировка ArrayList по полю объекта
Есть класс: public class Word { String content; int frequency; } Как отсортировать ArrayList, содержащий объекты этого класса,...

Реализация передвижения объекта по игровому полю
Всем добрый вечер Сделал игровое поле из speedbuttons, как сделать так чтобы компьютер перемещал значение свойства caption с одной клетки...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru