Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
1

Компаратор для дженерика

03.01.2016, 18:56. Показов 4288. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Пишу компаратор, который должен сортировать разные объекты (дженерики).
Если для заданного типа (B), в котором известны его поля написать компаратор легко по любому его полю, то для абстрактного типа мне не совсем понятно как конкретно сравнивать поля...

мои компараторы для сортировки по строковому и числовому полю.
Java
1
2
3
4
5
6
7
class StringComp implements Comparator<B>{
 
        public int compare(B b1, B b2) {
            return b1.b.compareTo(b2.b);
        }
        
    }
Java
1
2
3
4
5
6
class IntComp implements Comparator<B>{
        public int compare(B b1, B b2) {
            return b1.a-b2.a;
        }
        
    }
класс B
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
class B{
    int a;
    String b;
    public B(int a, String b){
        this.a=a;
        this.b=b;
    }
    
    public String toString(){
        return a+" "+b;
        
    }
}
Как нужно изменить компараторы чтоб они сортировал дженерики. Если кто-то знает подскажите пожалуйста. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2016, 18:56
Ответы с готовыми решениями:

Компаратор
Есть такой код: import java.util.Arrays; import java.util.Comparator; class Product { ...

Компаратор
Нужно отсортировать 1. за классом 2.за буквой класса 3.за фамилией package dela; import...

Компаратор
Есть класс: public clas SortedList&lt;E&gt;{ E arrays; } Как сравнить элемента...

Компаратор
Есть некий класс public class Dog implements Comparable { private String parrod; private...

6
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.01.2016, 19:01 2
Козак Алексей, что значит сортировать дженерики? У каждого объекта своя логика сортировки. Вот есть у меня класс Vasya. Откуда вы знаете как я его хочу отсортировать? Наибольшая абстракция в сортировке это интерфейс Comparator который надо реализовывать для моего класса Vasya если я хочу отсортировать коллекцию таких объектов.
0
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
03.01.2016, 19:05  [ТС] 3
KEKCoGEN, Я сам не очень понимаю.. в задании сказано Усовершенствуйте сортировки – сделайте их универсальными, умеющими сортировать объекты любых типов (дженерики).
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
03.01.2016, 20:34 4
Козак Алексей, можно задать ограничения. Например мтод типа

Java
1
2
3
    private  <T extends Comparable<T>> int cmp(T o1, T o2) {
        return o1.compareTo(o2);
    }
будет работать с любыми классами если они имплементируют интерфейс Comparable
0
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
03.01.2016, 20:39  [ТС] 5
KEKCoGEN, да, но в некоторых из этих класов есть например поле стринг, и по нему надо делать сортировку, а в некоторых нет и соответственно сортировку делать не надо. Вопрос в том как это учесть, или описать..
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
03.01.2016, 20:45 6
Цитата Сообщение от Козак Алексей Посмотреть сообщение
Пишу компаратор, который должен сортировать разные объекты
Компаратор сравнивает, а не сортирует.
Цитата Сообщение от Козак Алексей Посмотреть сообщение
Усовершенствуйте сортировки – сделайте их универсальными
Сортировки усовершенствовать просят, а не компаратор. Видимо, там где-то своя реализация сортировки...
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
03.01.2016, 20:46 7
Козак Алексей,


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
public class Test{
    public static void main(String[] args) {
        B[] array = new B[5];
        array[0] = new B(322, "");
        array[1] = new B(-32, "");
        array[2] = new B(22, "");
        array[3] = new B(-12, "");
        array[4] = new B(22, "");
 
        GenericSort sort = new GenericSort();
        for (B b : sort.sort(array)) {
            System.out.println(b);
        }
    }
}
 
class GenericSort {
    public <T extends Comparable> T [] sort(T [] obj) {
        Arrays.sort(obj);
        return obj;
    }
}
 
 
class B implements Comparable {
 
    private int i;
    private String s;
 
    public B(int i, String s) {
        this.i = i;
        this.s = s;
    }
 
    @Override
    public int compareTo(Object o) {
        final B otherObj = (B) o;
        if (this.i > otherObj.getI())
            return 1;
        if (this.i <otherObj.getI())
            return -1;
        return 0;
    }
 
    @Override
    public String toString() {
        return "B{" +
                "i=" + i +
                ", s='" + s + '\'' +
                '}';
    }
 
    public int getI() {
        return i;
    }
 
    public String getS() {
        return s;
    }
}
Цитата Сообщение от Козак Алексей Посмотреть сообщение
но в некоторых из этих класов есть например поле стринг, и по нему надо делать сортировку, а в некоторых нет и соответственно сортировку делать не надо.
в каждом из этих классов пишите реализацию метода compareTo и в нем решайте по каким условиям и полям сортировать объекты этого класса
1
03.01.2016, 20:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2016, 20:46
Помогаю со студенческими работами здесь

универсальный компаратор
а существует ли универсальный компаратор для всех типов, в который может в качестве параметра...

Рекурсивный компаратор
Всем доброго времени суток! Пишу компаратор &quot;рекурсивного действия&quot;. Нужно, чтобы при совпадении...

Нестатический компаратор
Здравствуйте, как можно создать компаратор, который будет обращаться к нестатическому полю класса?...

HeadSet и компаратор
У меня есть Компаратор для сортировки трисета: public class prodPriceComparator implements...


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

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