powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
13 сообщений из 13, страница 1 из 1
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38668993
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть arrayList объектов с полями num, name и id в следующем порядке

num name id
0 null p
0 b c
0 null d
4 e r
5 p t

Как отсортировать одним Collections.sort(list, new Comparator....), чтобы результатом получился список

num name id
4 e r
5 p t
0 b c
0 null d
0 null p

то есть сначала все объекты у которых num !=0, отсортировать по num в порядке возрастания,
потом объекты у которых num == 0 && name ! = null, отсортировать по name в алфавитном порядке,
потом объекты у которых num == 0 && name == null, отсортировать по id в алфавитном порядке????
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38668996
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так а в чем вопрос ваш? Вы хотите, что бы здесь за вас реализацию компаратора написали? :-)
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38668999
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEVcoach, да, именно используя один раз Collections.sort(list, new Comparator...), а не три раза:)
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669013
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем 3 раза? Все в одном можно написать.
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669017
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Psolao, Пытался реализовать в одном результат неудачный, на данный момент у меня реализовано тремя Collections.sort()
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669021
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа так

если объект1.номер>объект2.номер вернуть 1
иначе если объект1.номер<объект2.номер вернуть -1
иначе {
если (объект1.номер==пусто и объект2.номер==пусто)
{
если объект1.id>объект2.id вернуть 1
иначе если объект1.id<объект2.id вернуть -1
иначе вернуть 0
}
иначе если (объект2.номер==пусто) вернуть 1
иначе если (объект1.номер==пусто) вернуть -1
иначе вернуть объект1.номер.сравнить (объект2.номер)
}
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669039
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id тоже как строки сравнивать - не посмотрел что он у тебя строка. Привык что id число.
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669090
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Psolao, да id у меня текстовый тама будет compareTo, ну вышеприведенный код отображает не в том порядке :)

0 b c
0 null d
0 null p
4 e r
5 p t
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669182
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
public class TestObjectComparator implements Comparator<TestObject> {

	@Override
	public int compare(TestObject arg0, TestObject arg1) {
		int compNum=compareNum(arg0,arg1);
		if (compNum!=0) return compNum;
		int compName=compareName(arg0,arg1);
		if (compName!=0) return compName;
		return compareId(arg0,arg1);		
	}
	
	private int compareNum(TestObject arg0, TestObject arg1){
		if (arg0.num==arg1.num) return 0;
		else if (arg0.num==0 || arg0.num>arg1.num) return 1;
		else return -1;
	}

	private int compareName(TestObject arg0, TestObject arg1){
		if (arg0.name==null && arg1.name==null) return 0;
		else if (arg0.name==null) return 1;
		else if (arg0.name==null) return 0;
		else return arg0.name.compareTo(arg1.name);
	}
	
	private int compareId(TestObject arg0, TestObject arg1){
		return arg0.id.compareTo(arg1.id); 
	}		
}
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669273
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Psolao, благодарю, чучуть некорректно выводит, но думаю дальше сам разберусь)

При списке

0 y p
0 b c
0 null d
4 e r
5 p t

Выводит

4 e r
5 p t
0 b c
0 null d
0 y p

А надо

4 e r
5 p t
0 b c
0 y p
0 null d
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669283
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Psolao, вообщем добавил public class TestObjectComparator implements Comparator<TestObject> {

@Override
public int compare(TestObject arg0, TestObject arg1) {
int compNum=compareNum(arg0,arg1);
if (compNum!=0) return compNum;
int compName=compareName(arg0,arg1);
if (compName!=0) return compName;
return compareId(arg0,arg1);
}

private int compareNum(TestObject arg0, TestObject arg1){
if (arg0.num==arg1.num) return 0;
else if (arg0.num==0 || arg0.num>arg1.num) return 1;
else return -1;
}

private int compareName(TestObject arg0, TestObject arg1){
if (arg0.name==null && arg1.name==null) return 0;
else if (arg0.name==null) return 1;
else if (arg1.name==null) return 0;
else return arg0.name.compareTo(arg1.name);
}

private int compareId(TestObject arg0, TestObject arg1){
if (arg0.name==null) return 0;
else if (arg1.name==null) return 0;
else return arg0.id.compareTo(arg1.id);
}


Теперь выводит то, что надо

4 e r
5 p t
0 b c
0 y p
0 null d
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38669429
Psolao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поздно было спать хотел, и опечатался, вот как нужно
Код: 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.
public class TestObjectComparator implements Comparator<TestObject> {

	@Override
	public int compare(TestObject arg0, TestObject arg1) {
		int compNum=compareNum(arg0,arg1);
		if (compNum!=0) return compNum;
		int compName=compareName(arg0,arg1);
		if (compName!=0) return compName;
		return compareId(arg0,arg1);		
	}
	
	private int compareNum(TestObject arg0, TestObject arg1){
		if (arg0.num==arg1.num) return 0;
		else if (arg0.num==0 || arg0.num>arg1.num) return 1;
		else return -1;
	}

	private int compareName(TestObject arg0, TestObject arg1){
		if (arg0.name==null && arg1.name==null) return 0;
		else if (arg0.name==null) return 1;
		else if (arg1.name==null) return -1;
		else return arg0.name.compareTo(arg1.name);
	}
	
	private int compareId(TestObject arg0, TestObject arg1){
		return arg0.id.compareTo(arg1.id); 
	}		
}
...
Рейтинг: 0 / 0
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
    #38670022
s86s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Psolao, спасибо, выводит то что надо

4 e r
5 p t
0 b c
0 y p
0 null d
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]