Intervalo de valores em ArrayList

Preciso de fazer uma busca em um ArrayList, no qual me retorne o intervalo entre um valor e outro, podendo ter vários intervalos, sem ordenação.
Tenho a seguinte lista{0, ‘1, 2, 3, 4, 5,…, 16, 0’, ‘1, 2, 3, 4, 5,…, 16, 0’, ‘13, 14, 15, 16, 0’, ‘13, 14, 16, 0’ }
Dentro desse array, preciso separar os valores de 0 ou 1 até 0 e de 13 até 0, sendo que nesta lista de exemplo tenho 4 intervalos.

Desde já agradeço a quem puder me ajudar nesse raciocínio.

Não consegui entender essa lista.

Matheus, com outro array: ArrayList{0, 1, 3, 5, 16, 0, 2, 4, 16, 0}.
Repare que tenho três zeros na lista divindo dois conjuntos de números. (0, 1, 3, 5, 16, 0) e ( 2, 4, 16, 0). Preciso percorrer a lista, identificar esses conjuntos e separa-los, talvez em sublists.

± isso que você quer ::

 String StringTemp = "0,1,2,3,0,2,3,4";
      String[] numeros = StringTemp.split("0");
      List<String> itemList = new ArrayList<String>();
      for (String item : numeros) {
         itemList.add(item);
      }
      System.out.println(itemList);
 } 

output:

[, ,1,2,3,, ,2,3,4]

Isso funciona também, Mas no meu caso uso um ArrayList, e junto com esse valores tenho que recuperar outras informações na posição do array, se usar dessa forma acabarei perdendo a posição e consequentemente as outras informações. O que você acha, @marcelo-rebello?

o exemplo acima foi feito com uma String, pode ser alterado para um String[] , ou Integer[], enfim,
o que muda é a iteração no array.

mas como disse, neste caso vai perder a posição do zero, passa certinho ai um exemplo de como vem esse array, coloca ele no bloc code pra formatar o código

Olá, desculpe a demora em responder.
Adaptei seu exemplo ao meu caso, mas como ja previsto, ele perde a posição e não consigo recuperar as outras informações.

    String[] conjunto = null;
    String numeros = "";
    List<String> listaNum = new ArrayList<>();

    for (int i = 0; i < lista.size(); i++) {
        String num = Integer.toString(lista.get(i).getValue());
        listaNum.add(num);
    }

    conjunto = numeros.split("0");

    List<String> itemList = new ArrayList<String>();
    for (String item : conjunto) {
        itemList.add(item);
    }
    System.out.println(itemList);

Não estou com acesso ao Java para poder te mandar o código mas você pode fazer da seguinte forma, percorra o ArrayList principal (onde tem todos os subconjutos) e quando identificar um conjunto voce adiciona em outro arrayList que recebem um array.

E a cada conjunto encontrado ele adiciona e gera um new se caso ainda tiver conjuntos

Olá @McGMS, o problema é em como identificar esses subconjuntos(intervalos). Caso consiga identificar, poderia usar uma sublist. Tenho que percorrer a lista e, ao longo da leitura, identificar um número inicial e final, o intervalor entre eles é o subconjunto. Podem ter vários números inicias e finais dentro da lista que definem o intervalo do subconjunto, porém eles não se cruzam. Um intervalo tem que começar e acabar para depois começar outro.

Fala Vagner, então, putz… to pensando aqui e fiz uma alteração, agora é trabalhar em cima dela,
olha só :>

import java.util.*;
import java.util.stream.*;

    public class Main {
      public static void main(String[] args) {
        
         String[] sequencia = "0,2,3,4,9,0,3,3,5,7,0,3,6,8,4".split("0");
          List<String> itemList = Arrays.asList(sequencia);
             for (int i = 0; i < itemList.size(); i++) {
               System.out.println(itemList.get(i)); 
               
           } 

a saida é essa ::

,2,3,4,9,
,3,3,5,7,
,3,6,8,4 

o problema tá lá no zero, tô no cel sem o editor rodando pelo w3resource ,
agora fiquei encucado com isso tmb… talvez pegar o primeiro indice de cada posição que já dentro
do itemList<String> e inserir o zero, não sei, tipo ::

//Add elements to Arraylist
    arrayList.add("1");
    arrayList.add("2");
    arrayList.add("3");

depois ::

    arrayList.add(0,"0");

saida ::

ArrayList contains...
0 --- >> aqui entrou o zero, só pra testes, pode mudar a posição 
1
2
3

acho que alguma coisa ai neste sentido, entendeu

Entendi @marcelo-rebello. Acho que usando o split eu acabo perdendo a posição do array e consequentemente perdendo as outras informações que preciso puxar, uma vez que esse array é apenas um campo de objeto. Nesse objeto ainda tenho Nome, Valor e Data. : /