Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка содержимого List по полям типа Date 
:(
    Опции темы
newsTester
  Дата 3.4.2008, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



проблема не в том что я сортировок не знаю, а в том что лудшее враг хорошего...
И так, ЕСТЬ у меня объект типа List элементами которого являються элементы типа Item (по 10 - 100 шт.) у которых в, свою очередь, есть есть поля типа Date.
НАДО 1)объединить несколько (до 50) таких списков; 2) выбирать из них объекты Item в строгом соответствии со значениями поля типа Date (с точностью до минуты).
была ИДЕЯ сделать List в котором элементы соответствуют Годам и содержат многомерные массивы вида Месяц Х Число Х Час Х Минута элементы которого например тотже List.
ПРОБЛЕМА в том что работа с методами Date.getYear() и т.п. считается устаревшей... Да и вообще что вы об этом думаете?
PM MAIL   Вверх
niasilil
Дата 3.4.2008, 02:01 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Collections.sort(List list, Comparator c) 
напиши свой компаратор, три строчки. 
ЗЫ date сравнивать через методы Calendar 

Это сообщение отредактировал(а) niasilil - 3.4.2008, 02:02


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
newsTester
Дата 3.4.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Цитата

напиши свой компаратор, три строчки.


а что такое "компаратор"? Я им не разу не пользовалась... Верней может и пользовалась но не знаю что это так называется.

Цитата

date сравнивать через методы Calendar 


Ну да, если делать так как я думала то только так, но можно еще как минимум через методы after и before... Может так лучше буде?
PM MAIL   Вверх
mbasil
Дата 3.4.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Код

import java.util.*;
  public class DateComp implements Comparator {
    public int compare( Object o1, Object o2 ) {
       long dt1 = ((MyObject)o1).getDate().getTime();
       long dt2 = ((MyObject)o2).getDate().getTime();
       if ( dt1 == dt2 )         return 0;
       else if ( dt1 < dt2 )    return -1;
       else                           return 1;
  }
}

import java.util.*;
  public class ComparatorTest {
   public static void main(String[] args) {
    Comparator c = new DateComp();
    TreeSet set = new TreeSet(c);
    set.add(new MyObject());
    set.add(new MyObject());
    set.add(new MyObject());
    set.add(new MyObject());
 }
}

Если вам нужна реализация именно интерфейса List, то придется видимо писать свой класс, унаследовав его, например, от ArrayList, а уже в нем обеспечивать упорядоченное хранение, так как классы, реализующие  интерфейс List, сколько я помню, не поддерживают напрямую хранения в отсортированном порядке.

Это сообщение отредактировал(а) mbasil - 3.4.2008, 12:53
PM MAIL   Вверх
iluvatar
Дата 3.4.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 17.9.2007

Репутация: нет
Всего: 4



улыбнуло. давно не слышал про ручную сортировку на Java.
еще одна подсказака для сортировки классов - если постоянно требуется упорядочивать классы по одному и тому же правилу, чтобы каждый раз не писать Comparator, класс может реализовывать интерфейс Comparable
PM MAIL ICQ   Вверх
niasilil
Дата 3.4.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



mbasil, кстати да, getTime() действительно проще

TreeSet все таки не List


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
newsTester
Дата 4.4.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



mbasil
спасибо, что разъяснили это непонитное слово "компоратор"  smile  не знала что для таких вещей есть специальные названия..
Цитата

классы, реализующие  интерфейс List, сколько я помню, не поддерживают напрямую хранения в отсортированном порядке

как они хранят честно говоря не знаю, но там есть методы get(int index), set(int index, Object element), add(int index, Object element) и remove(int index), так что можно думать что элементы отсортированы.

iluvatar
Цитата

улыбнуло. давно не слышал про ручную сортировку на Java.

может вы и правы... но всеравно интересно
Цитата

чтобы каждый раз не писать Comparator, класс может реализовывать интерфейс Comparable

спасибо за наводку

З.Ы.
niasilil, iluvatar, mbasil, может я не умею разговаривать с людьми, поэтаму отдельно говорю что благодарна вам за помощь  smile   smile 
PM MAIL   Вверх
math64
Дата 4.4.2008, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



TreeSet и List - коллекции
Код

    List list;
    ...
    Comparator c = new DateComp();
    TreeSet set = new TreeSet(c);
    set.addAll(list);
    List sortedList = new LinkedList();
    sortedList.addAll(set);

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.