Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 12.06.2017
Сообщений: 36
1

Сортировка Comparator-ом по четным значениям

13.06.2017, 20:07. Показов 4090. Ответов 5

Author24 — интернет-сервис помощи студентам
Помогите никак не могу разобраться как работает Comparator и как его настроить.

Есть приритетная очередь pq:

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
import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
 
public class DemoQueue {
    public static void main(String[] args){
        Queue <Integer> q = new LinkedList<>();
        q.add(5);
        q.add(4);
        q.add(3);
        q.add(2);
        q.add(1);
        while (!q.isEmpty()){
            q.poll();
            System.out.println();   
        }
        
        
        Queue <Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
 
            @Override
            public int compare(Integer o1, Integer o2) {
                if ((o1-o2)%2 == 0) return 1;
                if ((o1-o2)%2>0)return -1;
                if ((o1-o2)%2<0)return -1;
                return 0;
            }
        });
        pq.add(5);
        pq.add(4);
        pq.add(3);
        pq.add(2);
        pq.add(1);
        while (!pq.isEmpty()){
            pq.poll();
            System.out.println(pq);
        }
        
    }
 
}
Нужно что бы в цикле метод poll, согласно сртировки компаратором, доставал вначале все четные, а потом нечетные.
Как правильно в компараторе писать условие и как он вообще работает?

По убыванию возрастанию еще понимаю, а вот как здесь поступить мозгов не хватает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2017, 20:07
Ответы с готовыми решениями:

Сортировка, Comparator
Доброго времени суток. Нужно дописать метод, который будет выполнять сортировку по скорости в...

Сортировка с использованием Comparator
Добрый день. public List&lt;User&gt; sortByAllFields (List&lt;User&gt;) - в этом методе необходимо...

Сортировка в порядке убывания и возрастания, используя Comparator
Здравствуйте! Подскажите, пожалуйста, можно ли решить данную проблему. Мне нужно вывести список...

Сортировка Dictionary по значениям
Здравствуйте, у меня есть Dictionary&lt;char, double&gt;, есть ли какая-либо системная функция или что-то...

5
62 / 64 / 14
Регистрация: 25.03.2017
Сообщений: 156
13.06.2017, 20:25 2
вот эта часть внутри компаратора лишнияя
Java
1
(o1-o2)
тебе же нужно проверять сам элемент на четность а не разность элементов, так что переделай немного условия.
компаратор возвращает 1 если первое число должно стоять выше в порядке сортировки, -1 если наоборот, 0 если равны
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
13.06.2017, 20:29 3
Кликните здесь для просмотра всего текста
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
import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
 
public class DemoQueue {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();
        q.add(5);
        q.add(4);
        q.add(3);
        q.add(2);
        q.add(1);
        while (!q.isEmpty()) {
            q.poll();
            System.out.println(q.poll()+" * ");
        }
 
 
        Queue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if (o1 % 2 == 0) {
                    if (o2 % 2 == 0) {
                        return o1.compareTo(o2);
                    } else {
                        return -1; // четные всегда меньше нечетных
                    }
                } else {
                    if (o2 % 2 == 0) {
                        return 1; // нечетные всегда больше четных
                    } else {
                        return o1.compareTo(o2);
                    }
                }
            }
        });
        pq.add(5);
        pq.add(4);
        pq.add(3);
        pq.add(2);
        pq.add(1);
        while (!pq.isEmpty()) {
            System.out.println(pq);
            pq.poll();
        }
 
    }
 
}

Компараторы работают просто. Если у Вас есть четные и нечетные, то чтобы они их отсортировал
сначала надо определить что четные всегда меньше нечетных, и тогда любые четные пойдут в начале.
Затем если оба четных или оба нечетных сравниваются своим родным компаратором который уже есть.
Вот и все.
Смотрите код.
1
0 / 0 / 1
Регистрация: 12.06.2017
Сообщений: 36
13.06.2017, 21:31  [ТС] 4
Объясните, где можно на пальцах разобраться с логикой компаратора? очень хочу наконец въехать.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.06.2017, 21:42 5
иде открываешь и разбираешь, а еще в 21 веке мы пользуемся гуглом
https://www.mkyong.com/java/ja... omparator/
0
0 / 0 / 1
Регистрация: 12.06.2017
Сообщений: 36
14.06.2017, 11:12  [ТС] 6
я такой статейки не видел спасибо счас изучу))))
набирать в поисковике буквы у меня получается и читать тоже умею)))) я думаю заметно. что до чего-то догадался же судя по решению в моей задаче.
Вопрос в ОСОЗНАНИИ я что-то упускаю и потом сижу по нескольку часов и как туземец с бубном пытаюсь упросить его (компаратор) работать. (-1, 0, 1 запомнил ведь, точно? )
Не обижайтесь на меня пожалуйста, буду рад любой помощи, спасибо.

Добавлено через 1 минуту
Еще работаю в Эклипсе. Где можно узнать как с помощью его разбирать такие вопросы?
0
14.06.2017, 11:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2017, 11:12
Помогаю со студенческими работами здесь

Сортировка словаря по значениям
Добрый день. Появилась необходимость посчитать частоту встречаемости каждого слова в списке. Вот...

Сортировка массива по другим значениям
Скажем у нас есть массив А = {1,2,3} На пример для 1 массива A присвоить значение 3 , для 2...

Сортировка по значениям из двух таблиц.
Доброго времени суток. Есть 2 таблицы USERTABLE и CTABLE. Обе таблицы во вложениях В первой нас...

Сортировка записей по значениям поля
Использую Paradox 7, TTable, TDBGrid. Первое поле-номер записи-нужно отсортировать по...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru