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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ArrayList поделить на несколько листов 
V
    Опции темы
Samotnik
Дата 20.10.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Првиет.
Есть ArrayList<String> в котором 30 000 элементов.
Нужно разделить этот лист на 10 частей. Что бы получилось 10 листов по 3 000 элементов в каждом smile  smile 
PM MAIL   Вверх
4epT
Дата 20.10.2011, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как насчет google-collections - ссылка ?

Метод partition.
PM MAIL   Вверх
Samotnik
Дата 20.10.2011, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



4epT, Про это знаю, нагуливался. 
Но хочется не прибегая к сторонним либам smile

Добавлено через 2 минуты и 57 секунд
Вроде алгоритм простой кажется. 
Но потратив 30 минут, не смог написать smile
PM MAIL   Вверх
priam220
Дата 20.10.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



метод subList(fromIndex, toIndex)  в цикле


Это сообщение отредактировал(а) priam220 - 20.10.2011, 14:50
PM MAIL   Вверх
LSD
Дата 20.10.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



List.subList()


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 20.10.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



LSD, priam220, спасибо, но я знал про subList
В общем вот, нашёл на стэковерфлове:
Код

public static <T extends Object> List<List<T>> split(List<T> list, int targetSize) {
    List<List<T>> lists = new ArrayList<List<T>>();
    for (int i = 0; i < list.size(); i += targetSize) {
        lists.add(list.subList(i, Math.min(i + targetSize, list.size())));
    }
    return lists;
}

http://stackoverflow.com/questions/1910236...o-several-lists
http://stackoverflow.com/questions/379551/...o-two-sub-lists
PM MAIL   Вверх
math64
Дата 20.10.2011, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Но учти: subList'ы оказываются привязваны к оригинальному List'у; модификация subList'а приводит к модификации оригинального List'а, а модификация List'а приводит к throw new ConcurentModificationException() при обращении к subList'у, а поскольку subList'ов несколько, то модификация запрещена. Поэтому лучше сразу копировать содержимое:
Код

public static <T extends Object> List<List<T>> split(List<T> list, int targetSize) {
    List<List<T>> lists = new ArrayList<List<T>>();
    for (int i = 0; i < list.size(); i += targetSize) {
        List<T> subList = list.subList(i, Math.min(i + targetSize, list.size()));
        List<T> partList = new ArrayList<T>();
        partList.addAll(subList);
        lists.add(partList);
    }
    return lists;
}

PM   Вверх
Samotnik
Дата 21.10.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



math64, спасибо, учту  smile 
PM MAIL   Вверх
ИванИванович
Дата 26.10.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

List<T> subList = list.subList(i, Math.min(i + targetSize, list.size()));
List<T> partList = new ArrayList<T>();
 partList.addAll(subList);

addAll  вызовет toArray класса SubList - "for" цикл через все элементы, и затем копирование получившегося массива используя arraycopy. Более эффективно перебросить все элемнты в массив сразу и разбивать на куски уже сам массив.

Код

    public static <T extends Object> List<List<T>> splitX(List<T> list, int targetSize) {
        List<List<T>> lists = new ArrayList<List<T>>();
        Object[] array = list.toArray();
        for (int i = 0; i < list.size(); i += targetSize) {
         Object[] next = new Object[Math.min(targetSize, list.size() - i)];
         System.arraycopy(array, i, next, 0, next.length);
         List<T> partList = (List<T>) Arrays.asList(next);
         lists.add(partList);
        }
        return lists;
    }


PM MAIL   Вверх
Kangaroo
Дата 26.10.2011, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Цитата(ИванИванович @  26.10.2011,  11:48 Найти цитируемый пост)
Более эффективно перебросить все элемнты в массив сразу и разбивать на куски уже сам массив.

Как вариант, но в данном случае оптимизация не нужна, да и код менее читабельный.


--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 26.10.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Kangaroo, вау! Кого я вижу  smile 
PM MAIL   Вверх
Kangaroo
Дата 26.10.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Samotnik, а как же. Прилетел тебе на помощь  smile А ты все продолжаешь странные вопросы задавать  smile 


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

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

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


 




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


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

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