Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
omuradil
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 77
#1

Сортировка в ArrayList - Программирование Android

10.03.2016, 11:42. Просмотров 431. Ответов 5

У меня есть ArrayList со сногими данными. Нужно отсортировать по TicketPrice и в другом Фрагменте показать. Но я в первый раз с таким сталкиваюсь. Раньше массивы обычным способом сортировал. То есть с For().

Вот сам ArrayList:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
ArrayList<TicketObjects> items = new ArrayList<>();
        items.add(new TicketObjects("FRU","13:45","16.09.2015","FRU","13:45","16.09.2015","1ч 15мин","15000",R.drawable.logo_flyduba));
        items.add(new TicketObjects("OSS","15:43","16.09.2015","SFD","17:45","16.09.2015","1ч 55мин","16000", R.drawable.logo_kazak));
        items.add(new TicketObjects("CVC","11:54","16.09.2015","TRW","12:44","16.09.2015","2ч 15мин","13000", R.drawable.logo_pegasus_logo));
        items.add(new TicketObjects("KTH", "23:55", "16.09.2015", "GHG", "18:33", "16.09.2015", "1ч 30мин", "10000", R.drawable.logo_turkish_airlines));
        items.add(new TicketObjects("FRU","13:45","16.09.2015","FRU","13:45","16.09.2015","1ч 15мин","15000",R.drawable.logo_flyduba));
        items.add(new TicketObjects("OSS","15:43","16.09.2015","SFD","17:45","16.09.2015","1ч 55мин","16000", R.drawable.logo_kazak));
        items.add(new TicketObjects("CVC","11:54","16.09.2015","TRW","12:44","16.09.2015","2ч 15мин","13000", R.drawable.logo_pegasus_logo));
        items.add(new TicketObjects("KTH", "23:55", "16.09.2015", "GHG", "18:33", "16.09.2015", "1ч 30мин", "10000", R.drawable.logo_turkish_airlines));
 
 
        RVAdapter adapter = new RVAdapter(items);
        recyclerview.setAdapter(adapter);
TickeObjects:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public TicketObjects(String departCode, String departTime, String departDate,
                         String arriveCode, String arriveTime, String arriveDate,
                         String flyTime, String ticketPrice, int airlineLogo) {
 
 
        this.departCode = departCode;
        this.departTime = departTime;
        this.departDate = departDate;
        this.arriveCode = arriveCode;
        this.arriveTime = arriveTime;
        this.arriveDate = arriveDate;
        this.flyTime = flyTime;
        this.ticketPrice = ticketPrice;
        this.airlineLogo = airlineLogo;
    }
А тут даже не знаю, каша в голове. Подскажите пожалуйста!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2016, 11:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка в ArrayList (Программирование Android):

Как поместить в preferences arrayList типа: arraylist<Class> - Программирование Android
Как поместить в preferences arrayList типа: arraylist&lt;Class&gt; Class содержит вид: public class CountryClass { private String...

ArrayList - Программирование Android
Здравствуйте. Сразу вопрос. У меня есть ArrayList заполнен данными. Вот структура: 1 Физика,Математика,Химия Мороз Т.Ю.,Клюк...

ArrayList - Программирование Android
Доброго времени суток! Мне нужно сделать случайную выборку чисел из массива и чтобы в последующим запросе небыло повторений. Так вот...

ArrayList contains object - Программирование Android
Мое приложение добавляет избранные игры в список. Мне нужно выводить сообщения о том, что список содержит определенные приложения, как это...

Android arrayList - Программирование Android
У меня есть два активити, в одном получаю значения и записываю их в ArrayList, а в другом мне их нужно печатать на экран. Как можно это...

Работа с ArrayList - Программирование Android
Добрый день! Второй день бьюсь над проблемой. Из ArrayList при помощи метода get все элементы выдаются одинаковые, равные последнему...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2473 / 1918 / 595
Регистрация: 12.05.2014
Сообщений: 6,746
Завершенные тесты: 1
10.03.2016, 12:37 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
для начала я бы вносил стоимость не строкой, а числом, так будет удобнее и быстрее потом сортировать или еще что-то
дальше...даты и время прибытия-отбытия я бы хранил в формате long, из любого объекта типа Date() можно вытянуть время в миллисекундах, очень удобно потом сортировать и выводить на экран в любом удобном формате

я не стал переделывать даты, но стоимость перевел в int
класс ниже как пример, можно было просто написать компаратор и сортировать одной строкой, но мне кажется так будет кошернее )
сам класс TicketObjects
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
class TicketObjects {
    private String departCode;
    private String departTime;
    private String departDate;
    private String arriveCode;
    private String arriveTime;
    private String arriveDate;
    private String flyTime;
    private int ticketPrice;
    private int airlineLogo;
 
    public TicketObjects(String departCode, String departTime, String departDate,
                         String arriveCode, String arriveTime, String arriveDate,
                         String flyTime, int ticketPrice, int airlineLogo) {
        this.departCode = departCode;
        this.departTime = departTime;
        this.departDate = departDate;
        this.arriveCode = arriveCode;
        this.arriveTime = arriveTime;
        this.arriveDate = arriveDate;
        this.flyTime = flyTime;
        this.ticketPrice = ticketPrice;
        this.airlineLogo = airlineLogo;
    }
 
    public String getDepartCode() {
        return departCode;
    }
 
    public void setDepartCode(String departCode) {
        this.departCode = departCode;
    }
 
    public String getDepartTime() {
        return departTime;
    }
 
    public void setDepartTime(String departTime) {
        this.departTime = departTime;
    }
 
    public String getDepartDate() {
        return departDate;
    }
 
    public void setDepartDate(String departDate) {
        this.departDate = departDate;
    }
 
    public String getArriveCode() {
        return arriveCode;
    }
 
    public void setArriveCode(String arriveCode) {
        this.arriveCode = arriveCode;
    }
 
    public String getArriveTime() {
        return arriveTime;
    }
 
    public void setArriveTime(String arriveTime) {
        this.arriveTime = arriveTime;
    }
 
    public String getArriveDate() {
        return arriveDate;
    }
 
    public void setArriveDate(String arriveDate) {
        this.arriveDate = arriveDate;
    }
 
    public String getFlyTime() {
        return flyTime;
    }
 
    public void setFlyTime(String flyTime) {
        this.flyTime = flyTime;
    }
 
    public int getTicketPrice() {
        return ticketPrice;
    }
 
    public void setTicketPrice(int ticketPrice) {
        this.ticketPrice = ticketPrice;
    }
 
    public int getAirlineLogo() {
        return airlineLogo;
    }
 
    public void setAirlineLogo(int airlineLogo) {
        this.airlineLogo = airlineLogo;
    }
 
    public static ArrayList<TicketObjects> sortListBy(ArrayList<TicketObjects> list, By by) {
        switch (by) {
            case PRICE:
                Collections.sort(list, byPrice);
                break;
            default:
                break;
        }
        return list;
    }
 
    private static final Comparator<TicketObjects> byPrice = new Comparator<TicketObjects>() {
        @Override
        public int compare(TicketObjects t1, TicketObjects t2) {
            int p1 = t1.getTicketPrice();
            int p2 = t2.getTicketPrice();
            return p1 == p2 ? 0 : p1 > p2 ? 1 : -1;
        }
    };
 
    public enum By {
        PRICE,
    }
}

сортировать так
Java
1
TicketObjects.sortListBy(items, TicketObjects.By.PRICE);
если хранить, как я предложил, даты в long то по примеру можно дописать пару компараторов для сортировки по прибытию-отбытию и добавить значение в enum
omuradil
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 77
10.03.2016, 14:01  [ТС] #3
Тут ругается на красную строку. Пишет

Java
1
2
3
4
5
6
FATAL EXCEPTION: main
                                                           android.content.res.Resources$NotFoundException: String resource ID #0x3a98
                                                               at android.content.res.Resources.getText(Resources.java:229)
                                                               at android.widget.TextView.setText(TextView.java:3620)
                                                               at kz.tem_tour.Tickets.RVAdapter.onBindViewHolder(RVAdapter.java:91)
                                                               at kz.tem_tour.Tickets.RVAdapter.onBindViewHolder(RVAdapter.java:19)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Override
    public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
itemViewHolder.departCode.setText(mItems.get(i).getDepartCode());
        itemViewHolder.departTime.setText(mItems.get(i).getDepartTime());
        itemViewHolder.departDate.setText(mItems.get(i).getDepartDate());
        itemViewHolder.arriveCode.setText(mItems.get(i).getArriveCode());
        itemViewHolder.arriveTime.setText(mItems.get(i).getArriveTime());
        itemViewHolder.arriveDate.setText(mItems.get(i).getArriveDate());
        itemViewHolder.flyTime.setText(mItems.get(i).getFlyTime());
        itemViewHolder.ticketPrice.setText(mItems.get(i).getTicketPrice());
        itemViewHolder.airlineLogo.setImageResource(mItems.get(i).getAirlineLogo());
 
        itemViewHolder.tripDepartCode.setText(mItems.get(i).getDepartCode());
        itemViewHolder.tripDepartTime.setText(mItems.get(i).getDepartTime());
        itemViewHolder.tripDepartDate.setText(mItems.get(i).getDepartDate());
        itemViewHolder.tripArriveCode.setText(mItems.get(i).getArriveCode());
        itemViewHolder.tripArriveTime.setText(mItems.get(i).getArriveTime());
        itemViewHolder.tripArriveDate.setText(mItems.get(i).getArriveDate());
        itemViewHolder.tripFlyTime.setText(mItems.get(i).getFlyTime());
    }
Pablito
2473 / 1918 / 595
Регистрация: 12.05.2014
Сообщений: 6,746
Завершенные тесты: 1
10.03.2016, 15:43 #4
ну в классе все поля приватные, их надо доставать через get
omuradil
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 77
10.03.2016, 17:21  [ТС] #5
Именно на itemViewHolder.ticketPrice.setText(mItems.get(i).getTicketPrice()); ... Если я там менял на integer тут что нужно менять?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
10.03.2016, 18:43 #6
omuradil, первая же ссылка по теме даёт (http://stackoverflow.com/questions/1...list-in-java):
Java
1
2
3
4
5
6
7
8
Collections.sort(fruits, new Comparator<Fruit>() {
        @Override
        public int compare(Fruit fruit2, Fruit fruit1)
        {
 
            return  fruit1.fruitName.compareTo(fruit2.fruitName);
        }
    });
Соответственно, вам нужно просто переписать порядок сортировки под ваш класс. Это проверено на многих примерах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2016, 18:43
Привет! Вот еще темы с ответами:

Фильтрация ArrayList - Программирование Android
Здравствуйте. Пишу приложение содержащее ArrayList. У пользователя есть возможность фильтровать этот список. Вот фильтрация у меня и не...

Работа с ArrayList - Программирование Android
Здравствуйте, в университете задали такую задачку, и её нужно реализовать в Андроид: Создать программу реализующую каталог автомобилей....

SharedPreferences ArrayList<String> - Программирование Android
Можно ли массив целый сохранить именно методом SharedPreferences ?

ArrayList<ListData> определение - Программирование Android
Скажите пожалуйста что означают эти знаки &lt;&gt; в строках ArrayList&lt;ListData&gt;, либо ArrayAdapter&lt;String&gt;?? Что они именно...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.03.2016, 18:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru