Pourquoi SsortingngJoiner alors que nous avons déjà SsortingngBuilder?

J’ai récemment rencontré une classe Java 8 SsortingngJoiner qui ajoute la chaîne à l’aide des délimiteurs et y ajoute un préfixe et un suffixe, mais je ne comprends pas la nécessité de cette classe car elle utilise également SsortingngBuilder en arrière-plan et effectue également une opération très simple de ajout des cordes.

Est-ce que je manque quelque chose en ne comprenant pas réellement le but réel de ce cours?

SsortingngJoiner est très utile lorsque vous devez joindre des chaînes dans un Stream .

Par exemple, si vous devez suivre la liste des chaînes:

 final List ssortingngs = Arrays.asList("Foo", "Bar", "Baz"); 

C’est beaucoup plus simple à utiliser

 final Ssortingng collectJoin = ssortingngs.stream().collect(Collectors.joining(", ")); 

comme ce serait avec un SsortingngBuilder :

 final Ssortingng collectBuilder = ssortingngs.stream().collect(Collector.of(SsortingngBuilder::new, (ssortingngBuilder, str) -> ssortingngBuilder.append(str).append(", "), SsortingngBuilder::append, SsortingngBuilder::toSsortingng)); 

Les exemples sur le Javadoc SsortingngJoiner sont très bons pour couvrir cela. Le tout est de faire abstraction du choix de séparateur de l’acte consistant à append des entrées. Par exemple, vous pouvez créer un menuisier, spécifier le séparateur à utiliser et le transmettre à une bibliothèque pour effectuer l’ajout d’éléments ou inversement.

La chaîne “[George: Sally: Fred]” peut être construite comme suit:

 SsortingngJoiner sj = new SsortingngJoiner(":", "[", "]"); sj.add("George").add("Sally").add("Fred"); Ssortingng desiredSsortingng = sj.toSsortingng(); 

Un SsortingngJoiner peut être utilisé pour créer une sortie formatée à partir d’un stream à l’aide de Collectors.joining (CharSequence). Par exemple:

 List numbers = Arrays.asList(1, 2, 3, 4); Ssortingng commaSeparatedNumbers = numbers.stream() .map(i -> i.toSsortingng()) .collect(Collectors.joining(", ")); 

Cela peut simplifier votre code dans certains cas d’utilisation:

 List list = // ...; // with SsortingngBuilder SsortingngBuilder builder = new SsortingngBuilder(); builder.append("["); if (!list.isEmpty()) { builder.append(list.get(0)); for (int i = 1, n = list.size(); i < n; i++) { builder.append(",").append(list.get(i)); } } builder.append("]"); // with StringJoiner StringJoiner joiner = new StringJoiner(",", "[", "]"); for (String element : list) { joiner.add(element); } 

SsortingngJoiner est une sorte de collecteur , bien qu’il SsortingngJoiner pas l’interface Collector . Il se comporte comme tel. Outre que vous pouvez transmettre le délimiteur, le préfixe et le suffixe, SsortingngJoiner peut être utilisé pour créer une sortie formatée à partir d’un Stream Collectors.joining(CharSequence) .

Ceci est particulièrement utile lorsque vous travaillez avec des stream parallèles , car à un moment donné, les lots en cours de traitement en parallèle devront être réunis et c’est à cet emplacement que SsortingngJoiner a lieu.

SsortingngJoiner est beaucoup plus simple que d’utiliser SsortingngBuilder. Un code très simple est comme

 SsortingngJoiner sj = new SsortingngJoiner(","); sj.add("aaa"); sj.add("bbb"); sj.add("ccc"); Ssortingng result = sj.toSsortingng(); //aaa,bbb,ccc