Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Посоветуйте с сортировкой через Collections.sort(list, new Comparator....) / 13 сообщений из 13, страница 1 из 1
13.06.2014, 15:47
    #38668993
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Есть 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
13.06.2014, 15:49
    #38668996
DEVcoach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Так а в чем вопрос ваш? Вы хотите, что бы здесь за вас реализацию компаратора написали? :-)
...
Рейтинг: 0 / 0
13.06.2014, 15:54
    #38668999
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
DEVcoach, да, именно используя один раз Collections.sort(list, new Comparator...), а не три раза:)
...
Рейтинг: 0 / 0
13.06.2014, 16:07
    #38669013
Psolao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
а зачем 3 раза? Все в одном можно написать.
...
Рейтинг: 0 / 0
13.06.2014, 16:10
    #38669017
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Psolao, Пытался реализовать в одном результат неудачный, на данный момент у меня реализовано тремя Collections.sort()
...
Рейтинг: 0 / 0
13.06.2014, 16:14
    #38669021
Psolao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Типа так

если объект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
13.06.2014, 16:29
    #38669039
Psolao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
id тоже как строки сравнивать - не посмотрел что он у тебя строка. Привык что id число.
...
Рейтинг: 0 / 0
13.06.2014, 17:57
    #38669090
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Psolao, да id у меня текстовый тама будет compareTo, ну вышеприведенный код отображает не в том порядке :)

0 b c
0 null d
0 null p
4 e r
5 p t
...
Рейтинг: 0 / 0
13.06.2014, 22:24
    #38669182
Psolao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Код: 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
14.06.2014, 10:46
    #38669273
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
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
14.06.2014, 11:32
    #38669283
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
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
14.06.2014, 19:57
    #38669429
Psolao
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Поздно было спать хотел, и опечатался, вот как нужно
Код: 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
16.06.2014, 09:08
    #38670022
s86s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте с сортировкой через Collections.sort(list, new Comparator....)
Psolao, спасибо, выводит то что надо

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


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