Java8 – Concaténer des String

Java 8 apporte son lot de nouveautés (et de sucre syntaxique également). Dans cet article je vais vous présenter les différentes façons de concaténer des String avec l’API StringJoiner. Je vais essayer de faire le tour en vous montrant les différentes méthodes fournies par l’API pour arriver à nos fins.

Instance de StringJoiner

Constructeur simple

Le constructeur simple requiert un paramètre qui défini la chaine de caractères à utiliser pour concaténer les String.

StringJoiner joiner = new StringJoiner("/");
joiner.add("13");
joiner.add("12");
joiner.add("1988");
String birthday = joiner.toString(); // "13/12/1988"

L’API fournit égament une écriture plus fluide :

String birthday = new StringJoiner("/")
.add("13").add("12").add("1988")
.toString(); // "13/12/1988"

Constructeur avancé

Le constructeur avancé requiert 3 paramètres :

  • La chaine de caractères à utiliser pour concaténer
  • Une chaine de caractères à ajouter au début du String
  • Une chaine de caractères à ajouter à la fin du String
String birthday = new StringJoiner("/", "Olivier est né le ", " c'est fou non ?")
.add("13").add("12").add("1988")
.toString(); // "Olivier est né le 13/12/1988 c'est fou non ?"

Méthode statique de String

Avec Java 8, l’API String voit apparaitre la méthode statique « join ».

  • Le premier paramètre défini la chaine caractères à utiliser pour concaténer
  • Les paramètres suivants sont le valeurs à concaténer
String birthday = String.join("/", "13", "12", "1988"); // "13/12/19883"

La méthode existe aussi avec un Iterable :

Iterable<String> values = Arrays.asList("13", "12", "1988");
String birthday = String.join("/", values);

Stream et Collectors

La toute nouvelle API Stream associée avec la toute nouvelle API Collectors permet également d’effectuer un « join ».

Version simple String

En partant d’une liste de String, voici comment concaténer.

List<String> values = Arrays.asList("13", "12", "1988");
String birthday = values.stream().collect(Collectors.joining("/"));

Version avec Objet complexe

Maintenant, on va partir d’un objet Car, puis on souhaite concaténer le nom des modèles de voitures.

Classe Car
public class Car {
	private String model;
 
	public Car(final String model) {
		this.model = model;
	}
 
	public String getModel() {
		return model;
	}
}
Code d’exemple
List<Car> values = Arrays.asList(
	new Car("Twingo"),
	new Car("Ibiza"),
	new Car("Ferrari")
);
String models = values.stream()
	.map(Car::getModel)
	.filter((s) -> s.contains("a"))
	.collect(Collectors.joining("-"));

On peut voir apparaitre un système Map/Reduce :

  • map(Car::getModel) : Ne garde que le String « model » de l’objet Car
  • filter((s) -> s.contains(« a »)) : Ne garde que les modèles qui contiennent un « a »
  • collect(Collectors.joining(« -« )) : Concatène les modèles sélectionnés en les séparant par un tiret
Tagués avec : , , , , ,
Publié dans Java

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*