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.
Ú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.