Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12

Сортировка списка по ссылкам на объекте

04.09.2017, 20:17. Показов 1417. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане!!! Натолкните пжлст на мысль как реализовать сортировку списка по объектным ссылкам. Например
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
class Base {
int i;
}
 
class A extends Base {
 
}
 
сlass B extends Base {
 
}
 
class C extends Base {
 
}
 
class Main {
 
ArrayList<Base> list = new ArrayList<>();
A n1 = new A(...);
A n2 = new A(...);
A n3 = new A(...);
B n4 = new B(...);
B n5 = new B(...);
B n6 = new B(...);
C n7 = new C(...);
C n8 = new C(...);
C n9 = new C(...);
Collections.addAll(list, n1, n2, n3, n4, n5, n6, n7, n8, n9);
}
Мне требуется отсортировать массив list по убыванию по группам объектов. Т.е. сначала идут ссылки на С по убыванию, затем на B и наконец на A. Как построить компаратор чтобы он сравнивал объекты по ссылкам? У меня мысли либо бить список на несколько через instanseof, либо в каждый класс добавлять какую то константу приоритета. Но оба варианта мне не нравятся.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2017, 20:17
Ответы с готовыми решениями:

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

Prototype Объект в объекте в объекте
Всем здравствуйте! Хотел бы у спросить как оптимально организовать с объектом вида var object1 = { object1: { ...

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка
Здравствуйте! Возникла проблема с программой. Тема: &quot;Сортировка двусвязного списка путем исключения элемента с минимальным значением и...

5
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.09.2017, 21:26
Цитата Сообщение от ruina Посмотреть сообщение
по объектным ссылкам
никак, не надо в джаве думать про объектные ссылки
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
04.09.2017, 21: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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
 
public class Main {
    public static void main(String[] args) {
        ArrayList<Base> list = new ArrayList<>();
        A n1 = new A(1);
        A n2 = new A(2);
        A n3 = new A(3);
        B n4 = new B(4);
        B n5 = new B(6);
        B n6 = new B(7);
        C n7 = new C(8);
        C n8 = new C(9);
        C n9 = new C(10);
        Collections.addAll(list, n1, n2, n3, n4, n5, n6, n7, n8, n9);
        list.sort(new Comparator<Base>() {
            @Override
            public int compare(Base o1, Base o2) {
                return -o1.getClass().getName().compareTo(o2.getClass().getName());
            }
        });
        System.out.println(Arrays.toString(list.toArray()));
 
    }
}
 
class Base {
    int i;
 
    @Override
    public String toString() {
        return getClass().getName() + "{i=" + i +
                '}';
    }
}
 
class A extends Base {
    public A(int i) {
        this.i = i;
    }
}
 
 
class B extends Base {
    public B(int i) {
        this.i = i;
    }
}
 
class C extends Base {
    public C(int i) {
        this.i = i;
    }
}
Вывод будет
Code
1
[C{i=8}, C{i=9}, C{i=10}, B{i=4}, B{i=6}, B{i=7}, A{i=1}, A{i=2}, A{i=3}]
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12
05.09.2017, 06:30  [ТС]
Я наверное очень упростил пример. Вот условие задачи. Я всё выполнил кроме последнего пункта.

Условие задачи
Создать консольное приложение с единственным аргументом командной
строки – имя входного файла.
Файл является текстовым и содержит значения скоростей в следующих
единицах измерения (в скобках указаны коды):
– километры в час ( kmh );
– мили в час ( mph );
– узлы ( kn );
– метры в секунду ( ms ).
В одной строке файла содержится одно значение скорости. Формат
строки:
value unit
где value - значение скорости, unit - код единицы измерения, место и
количество пробелов в строке - произвольное.
Все исходные данные корректные. Если в исходных данных есть
ошибка, то данный тест (файл) исключается из рассмотрения.
Приложение должно считать данные из исходного файла и вывести на
консоль следующие результаты.
1. Исходный список (массив или коллекцию) скоростей в формате
value unit = value_in_ms ms
где value_in_ms - значение скорости в метрах в секунду.
2. Упорядоченный по возрастанию список скоростей, учитывая единицы
измерения.
3. Определить, есть ли в списке хотя бы одно значение скорости, равное
2 километра в час (вывести на консоль yes или no ; запрещается выполнять
операцию поиска в цикле чтения файла).
4. Упорядоченный по убыванию список скоростей, сгруппированный по
единицам измерения (вначале kmh , затем mph , kn и последними ms ).
Требования:
– Использовать объектно-ориентированный подход для описания
сущностей предметной области.
– Приложение должно быть консольным. Не использовать графический
интерфейс!
Предпочтения по:
– выбору языка программирования: 1) Java ; 2) C++; 3) другой ООП
язык,
– реализации сортировки и поиска: 1) интерфейс стандартных классов
языка программирования; 2) собственный код.
Преобразование физических величин:
1 миля в час - 1609 метра в час;
1 узел - 1852 метра в час.
Пример исходного файла
1 ms
1 kmh
1 mph
1 kn
2 ms
2 kmh
2 mph
2 kn
3 ms
3 kmh
3 mph
3 kn
Вывод на консоль
1 ms = 1 ms
1 kmh = 0.278 ms
1 mph = 0.447 ms
1 kn = 0.514 ms
2 ms = 2 ms
2 kmh = 0.556 ms
2 mph = 0.894 ms
2 kn = 1.029 ms
3 ms = 3 ms
3 kmh = 0.833 ms
3 mph = 1.341 ms
3 kn = 1.543 ms
1 kmh
1 mph
1 kn
2 kmh
3 kmh
2 mph
1 ms
2 kn
3 mph
3 kn
2 ms
3 ms
yes
3 kmh
2 kmh
1 kmh
3 mph
2 mph
1 mph
3 kn
2 kn
1 kn
3 ms
2 ms
1 ms

Как я понимаю кроме как воспользоваться компаратором по имени класса вариантов нет?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.09.2017, 08:10
Создай класс с двумя полями, double speed и Unit unit, Unit это enum.
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 12
05.09.2017, 14:54  [ТС]
Спасибо! Все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.09.2017, 14:54
Помогаю со студенческими работами здесь

Создание списка и сортировка списка
Добрый день, понимаю, что в последнее время от меня многовато тем, но конец семестра, так что надеюсь, что это простительно. Требуется...

Сортировка списка значений словаря, по номеру заголовка, элемента списка значений
Ёу. Сижу программирую такой, и не получается отсортировать словарик мой. private static Dictionary&lt;Classic,...

Сортировка списка, главная сортировка по второму числу, второстепенная по первому числу
CardList.Sort(new Comparison&lt;int&gt;((arg1, arg2) =&gt; { return (arg1 % 10).CompareTo(arg2 % 10); })); В данном коде сортируется список...

Сортировка списка
Дан список сел и расстояния до них от города. Нужно вывести села в порядке удаленности от города. Городов до 10^8. Расстояния - целые...

Сортировка списка
Вот не могу понять почему список не сортируется, а уходит в бессконечность. Я даже начал сравнивать только 2 элемента списка, отключив...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru