Notez que votre code Java 8 d'origine
System.out.println("items: " + stringList.stream().collect(Collectors.joining(", ")));
peut être simplifié à
System.out.println("items: " + String.join(", ", stringList));
En Java 7, vous devez utiliser un StringBuilder
pour faire la même chose efficace, mais vous pouvez encapsuler dans une classe d'utilité, similaire à StringJoiner
de Java 8. L'utilisation d'une classe avec la même API permet de créer du code compatible Java 7 encore facile à adapter pour utiliser la version Java 8.
Cependant, il est peu probable que ce soit la performance la plus partie critique de votre demande, par conséquent, vous pouvez utiliser une approche pragmatique:
String s = stringList.toString();
System.out.append("items: ").append(s, 1, s.length()-1).println();
Cela ne fonctionne tout simplement pas imprimer le [
et ]
de la chaîne représentation, résultant en la liste séparée par des virgules souhaitée. Bien que cette représentation de chaîne ne soit pas obligatoire, il serait difficile de trouver un exemple d'implémentation de collection utile qui n'adhère pas à cette convention (et vous sauriez si vous avez utilisé une telle classe).En ce qui concerne votre question mise à jour se référant à quelque chose comme "modèle de commande", eh bien, cela n'a rien à voir avec le code Stream de votre question, mais il existe déjà des abstractions, comme celle utilisée dans le code ci-dessus.
Vous pouvez créer une méthode comme
static <A extends Appendable> A join(A target, CharSequence sep, List<?> data) {
try {
CharSequence currSep = "";
for(Object item: data) {
target.append(currSep).append(item.toString());
currSep = sep;
}
return target;
} catch(IOException ex) {
throw new IllegalStateException(ex);
}
}
qui offre une certaine flexibilité, par exemple vous pouvez l'utiliser pour acquérir un String
:
String s = join(new StringBuilder(), ", ", stringList).toString();
System.out.println("items: " + s);
ou tout simplement imprimer:
join(System.out.append("items: "), ", ", stringList).println();
StringBuilder .... –
Ou tout simplement jeter un oeil au code source du JDK 8 [StringJoiner] (http : //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/StringJoiner.java) class et écrivez une version JDK 7 –
Votre code est presque correct . Le seul changement que je ferais est de 'System.out.print'' joiner' et 'item' séparément, pour éviter la création de chaîne inutile. 'StringBuilder' est moins efficace ici, puisque vous devriez simplement mettre en mémoire tampon les caractères, créer une chaîne, écrire dans un autre tampon de caractères; au lieu de cela, écrivez directement dans ce tampon final (comme vous le faites déjà). –