Java: как я могу разделить ArrayList в нескольких небольших ArrayLists?

Проблема в том, что один из них печатает для длинных штрих-кодов

Вы имеете в виду, что длина штрих-кода слишком велика и она обрезается / обрезается, и поэтому она не сканируемое?

Какое программное обеспечение генерирует ZPL? И какие значения устанавливаются с помощью ^BY, который контролирует ширину штрихкодов модуля? Поскольку метка 300 dpi читаема, звучит так, как будто вам нужно уменьшить ширину модуля, установленную на ^BY для метки 200 dpi.

183
задан Bo Persson 24 March 2012 в 22:21
поделиться

5 ответов

Вы можете использовать subList (int fromIndex, int toIndex) для просмотра части исходного списка.

Из API:

Возвращает представление части этого списка между указанным fromIndex включительно и toIndex , исключая. (Если fromIndex и toIndex равны, возвращаемый список пуст.) Возвращенный список поддерживается этим списком, поэтому неструктурные изменения в возвращаемом списке отражаются в этом списке , наоборот. Возвращенный список поддерживает все дополнительные операции со списком, поддерживаемые этим списком.

Пример:

List<Integer> numbers = new ArrayList<Integer>(
    Arrays.asList(5,3,1,2,9,5,0,7)
);

List<Integer> head = numbers.subList(0, 4);
List<Integer> tail = numbers.subList(4, 8);
System.out.println(head); // prints "[5, 3, 1, 2]"
System.out.println(tail); // prints "[9, 5, 0, 7]"

Collections.sort(head);
System.out.println(numbers); // prints "[1, 2, 3, 5, 9, 5, 0, 7]"

tail.add(-1);
System.out.println(numbers); // prints "[1, 2, 3, 5, 9, 5, 0, 7, -1]"

Если вам нужно, чтобы эти разделенные списки НЕ были представлением, просто создайте новый Список из подсписка . Вот пример объединения нескольких из этих вещей:

// chops a list into non-view sublists of length L
static <T> List<List<T>> chopped(List<T> list, final int L) {
    List<List<T>> parts = new ArrayList<List<T>>();
    final int N = list.size();
    for (int i = 0; i < N; i += L) {
        parts.add(new ArrayList<T>(
            list.subList(i, Math.min(N, i + L)))
        );
    }
    return parts;
}


List<Integer> numbers = Collections.unmodifiableList(
    Arrays.asList(5,3,1,2,9,5,0,7)
);
List<List<Integer>> parts = chopped(numbers, 3);
System.out.println(parts); // prints "[[5, 3, 1], [2, 9, 5], [0, 7]]"
parts.get(0).add(-1);
System.out.println(parts); // prints "[[5, 3, 1, -1], [2, 9, 5], [0, 7]]"
System.out.println(numbers); // prints "[5, 3, 1, 2, 9, 5, 0, 7]" (unmodified!)
311
ответ дан 23 November 2019 в 05:58
поделиться

Можно использовать chunk метод от Наборы Eclipse :

ArrayList<Integer> list = new ArrayList<>(Interval.oneTo(1000));
RichIterable<RichIterable<Integer>> chunks = Iterate.chunk(list, 10);
Verify.assertSize(100, chunks);

Несколько примеров chunk метод были включены в этот статья DZone также.

Примечание: Я - разработчик для Наборов Eclipse.

3
ответ дан 23 November 2019 в 05:58
поделиться

Я предполагаю, что проблема, с которой вы столкнулись, связана с присвоением имени 100 спискам массивов и их заполнением. Вы можете создать массив ArrayLists и заполнить каждый из них с помощью цикла.

Самый простой (читай глупейший) способ сделать это:

ArrayList results = new ArrayList(1000);
    // populate results here
    for (int i = 0; i < 1000; i++) {
        results.add(i);
    }
    ArrayList[] resultGroups = new ArrayList[100];
    // initialize all your small ArrayList groups
    for (int i = 0; i < 100; i++) {
            resultGroups[i] = new ArrayList();
    }
    // put your results into those arrays
    for (int i = 0; i < 1000; i++) {
       resultGroups[i/10].add(results.get(i));
    } 
3
ответ дан 23 November 2019 в 05:58
поделиться

Вы можете добавить библиотеку Guava в свой проект и использовать метод Lists.partition , например

List<Integer> bigList = ...
List<List<Integer>> smallerLists = Lists.partition(bigList, 10);
200
ответ дан 23 November 2019 в 05:58
поделиться

Здесь обсуждался аналогичный вопрос, Java: разделить список на два подсписка?

В основном вы можете использовать подсписок. Подробнее здесь: subList

Возвращает представление части этого списка между fromIndex, включая, и toIndex, исключая. (Если fromIndex и toIndex равны, возвращаемый список пуст.) Возвращаемый список поддерживается этим списком, поэтому изменения в возвращаемом списке отражаются в этом списке, и наоборот. Возвращенный список поддерживает все дополнительные операции со списком, поддерживаемые этим списком ...

3
ответ дан 23 November 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: