Converter uma sequência separada por vírgulas em uma lista em Java

Converter uma sequência separada por vírgulas em uma lista em Java

1. Visão geral

Neste tutorial, veremos como converterString separados por vírgula emList de strings. Além disso, transformaremosString separados por vírgula de números inteiros emList deIntegers.

2. Dependências

Alguns dos métodos que usaremos para nossas conversões exigem as bibliotecasApache Commons Lang 3eGuava. Então, vamos adicioná-los ao nosso arquivopom.xml:


    org.apache.commons
    commons-lang3
    3.8.1


    com.google.guava
    guava
    27.0.1-jre

3. Definindo nosso exemplo

Antes de começar, vamos definir duas strings de entrada que usaremos em nossos exemplos. A primeira string,countries, contém várias strings separadas por uma vírgula, e a segunda string,ranks, inclui números separados por uma vírgula:

String countries = "Russia,Germany,England,France,Italy";
String ranks = "1,2,3,4,5,6,7";

E, ao longo deste tutorial, converteremos as strings acima em listas de strings e inteiros que armazenaremos em:

List convertedCountriesList;
List convertedRankList;

Por fim, depois de realizarmos nossas conversões, os resultados esperados serão:

List expectedCountriesList = Arrays.asList("Russia", "Germany", "England", "France", "Italy");
List expectedRanksList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);

4. Java principal

Em nossa primeira solução, converteremos uma string em uma lista de strings e inteiros usando o núcleo do Java.

Primeiro, vamossplit our string into an array of strings usando o método utilitário de classesplit, aString. Então, usaremosArrays.asList em nossa nova matriz de strings para convertê-la em uma lista de strings:

List convertedCountriesList = Arrays.asList(countries.split(",", -1));

Vamos agora transformar nossa sequência de números em uma lista de inteiros.

Usaremos o métodosplit para converter nossa string de números em uma matriz de strings. Então, vamos converter cada string em nosso novo array em um inteiro e adicioná-lo à nossa lista:

String[] convertedRankArray = ranks.split(",");
List convertedRankList = new ArrayList();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}

Em ambos os casos, usamossplit utility method from the String class para dividir a string separada por vírgulas em uma matriz de string.

Observe que ooverloaded split method usado para converter nossa stringcountries contém o segundo parâmetrolimit, para o qual fornecemos o valor -1. Isso especifica que o padrão separador deve ser aplicado quantas vezes for possível.

O métodosplit que usamos para dividir nossa string de inteiros (ranks) usa zero comolimit e, portanto, ignora as strings vazias, enquanto osplit usado no A stringcountries retém strings vazias na matriz retornada.

5. Fluxos Java

Agora, vamos implementar as mesmas conversões usandoJava Stream API.

Primeiro, vamos converter nossa stringcountries em uma matriz de strings usandosplit method in the String class. Em seguida, usaremos a classeStream para converter nosso array em uma lista de strings:

List convertedCountriesList = Stream.of(countries.split(",", -1))
  .collect(Collectors.toList());

Vamos ver como converter nossa string de números em uma lista de inteiros usando umStream.

Novamente, primeiro converteremos a string de números em uma matriz de strings usando o métodosplite converteremos a matriz resultante emStream deString usando o métodoof() na classeStream.

Então, vamostrim the leading and trailing spaces from each String on the Stream using map(String::_trim)_.

A seguir, vamos aplicarmap(Integer::parseInt) em nosso stream para converter cada string em nossoStream em umInteger.

E, finalmente, chamaremoscollect(Collectors.toList()) emStream para convertê-lo em uma lista de inteiros:

List convertedRankList = Stream.of(ranks.split(","))
  .map(String::trim)
  .map(Integer::parseInt)
  .collect(Collectors.toList());

6. Apache Commons Lang

Nesta solução, usaremos a bibliotecaApache Commons Lang3 para realizar nossas conversões. O Apache Commons Lang3 fornece várias funções auxiliares para manipular as principais classes Java.

Primeiro, vamos dividir nossa string em uma matriz de strings usandoStringUtils.splitPreserveAllTokens. Em seguida, vamos converter nossa nova matriz de string em uma lista usando o métodoArrays.asList:

List convertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));

Vamos agora transformar nossa string de números em uma lista de inteiros.

Usaremos novamente o métodoStringUtils.split para criar uma matriz de strings a partir de nossa string. Então, vamos converter cada string em nossa nova matriz em um inteiro usandoInteger.parseInt e adicionar o inteiro convertido à nossa lista:

String[] convertedRankArray = StringUtils.split(ranks, ",");
List convertedRankList = new ArrayList();
for (String number : convertedRankArray) {
    convertedRankList.add(Integer.parseInt(number.trim()));
}

Neste exemplo, usamos o métodosplitPreserveAllTokens para dividir nossa stringcountries , enquanto usamos o métodosplit para dividir nossa stringranks.

Mesmo que ambas as funções dividam a string em uma matriz, osplitPreserveAllTokens preserves all tokens including the empty strings created by adjoining separators, while the split method ignores the empty strings.

Portanto, se temos strings vazias que queremos incluir em nossa lista, devemos usarsplitPreserveAllTokens em vez desplit.

7. Goiaba

Finalmente, usaremos a bibliotecaGuava para converter nossas strings em suas listas apropriadas.

Para converter nossacountries string, vamos primeiro chamarSplitter.on com uma vírgula como parâmetro para especificar em qual caractere nossa string deve ser dividida.

Então, usaremos o métodotrimResults em nossa instânciaSplitter. Isso ignorará todos os espaços em branco iniciais e finais das substrings criadas.

Finalmente, usaremos o métodosplitToList para dividir nossa string de entrada e convertê-la em uma lista:

List convertedCountriesList = Splitter.on(",")
  .trimResults()
  .splitToList(countries);

Agora, vamos converter a sequência de números em uma lista de inteiros.

Voltaremos a converter a string de números em uma lista de strings , seguindo o mesmo processo que seguimos acima.

Então, usaremos oLists.transform method, which accepts our list of strings as the first parameter an implementation of the Function interface as the second parameter.

A implementação da interfaceFunction converte cada string em nossa lista em um inteiro:

List convertedRankList = Lists.transform(Splitter.on(",")
  .trimResults()
  .splitToList(ranks), new Function() {
      @Override
      public Integer apply(String input) {
          return Integer.parseInt(input.trim());
      }
  });

8. Conclusão

Neste artigo, convertemosStrings separados por vírgula em uma lista de strings e uma lista de inteiros. No entanto, podemos seguir processos semelhantes para converter aString em uma lista de quaisquer tipos de dados primitivos.

Como sempre, o código deste artigo está disponívelover on Github.