Juntando objetos em uma String com Java 8 Stream API

Este post mostra como juntar objetos em uma string com Java 8 usando a API Stream com exemplos práticos para o melhor entendimento.

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - TUTORIAL

Última atualização em: | 6268 Visualizações

Você pode aproveitar os coletores Java 8 para concatenar alguns objetos em uma String separada por um delimitador.

Isso pode ser facilmente obtido, veja o código:

@Test
public void test() {
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    String toReturn = numbers.stream().map(Object::toString).collect(Collectors.joining(","));
    assertEquals("1,2,3,4,5", toReturn);
}

O resultado do teste será verdadeiro. Assim teremos uma lista de números inteiros agrupadas em uma String separados pelo separador.

Caso tenha uma lista de objetos, podemos utilizar a mesma lógica sobre a implementação. Veja:

class Product {
    private String name;
    private Double value;

    public Product(String name, Double value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }
    public Double getValue() {
        return value;
    }
}

@Test
public void testProduct() {
    List<Product> products = Arrays.asList(new Product("Mouse", 10.0), new Product("Mouse Pad", 5.0));
    String toReturn = products.stream().map(Product::getName).collect(Collectors.joining(", "));
    assertEquals("Mouse, Mouse Pad", toReturn);
}

Note que mapeamos apenas o nome para realizar a junção.



Assim teremos uma lista com apenas os nomes dos produtos.

Veja a classe completa:

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static org.junit.Assert.assertEquals;

public class StreamJoiningTests {

    @Test
    public void test() {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        String toReturn = numbers.stream().map(Object::toString).collect(Collectors.joining(","));
        assertEquals("1,2,3,4,5", toReturn);
    }

    class Product {
        private String name;
        private Double value;

        public Product(String name, Double value) {
            this.name = name;
            this.value = value;
        }

        public String getName() {
            return name;
        }
        public Double getValue() {
            return value;
        }
    }

    @Test
    public void testProduct() {
        List<Product> products = Arrays.asList(new Product("Mouse", 10.0), new Product("Mouse Pad", 5.0));
        String toReturn = products.stream().map(Product::getName).collect(Collectors.joining(", "));
        assertEquals("Mouse, Mouse Pad", toReturn);
    }

}

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!