Java: convierte List<String> en una cadena join()d
JavaScript tieneArray.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
¿Java tiene algo como esto? Sé que puedo improvisar algo yo mismo con StringBuilder
:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
.. pero no tiene sentido hacer esto si algo así ya forma parte del JDK.
String.join
Con Java 8 puedes hacer esto sin ninguna biblioteca de terceros.
Si desea unirse a una Colección de Cadenas, puede utilizar el método String.join
() :
List<String> list = Arrays.asList("foo", "bar", "baz");
String joined = String.join(" and ", list); // "foo and bar and baz"
Collectors.joining
Si tiene una Colección con otro tipo que no sea String, puede usar Stream API con el Collector que se une :
List<Person> list = Arrays.asList(
new Person("John", "Smith"),
new Person("Anna", "Martinez"),
new Person("Paul", "Watson ")
);
String joinedFirstNames = list.stream()
.map(Person::getFirstName)
.collect(Collectors.joining(", ")); // "John, Anna, Paul"
La StringJoiner
clase también puede resultar útil.
Todas las referencias a Apache Commons están bien (y eso es lo que usa la mayoría de la gente), pero creo que el equivalente de Guava , Joiner , tiene una API mucho mejor.
Puedes hacer el caso de unión simple con
Joiner.on(" and ").join(names)
pero también lidiar fácilmente con nulos:
Joiner.on(" and ").skipNulls().join(names);
o
Joiner.on(" and ").useForNull("[unknown]").join(names);
y (lo suficientemente útil en lo que a mí respecta como para usarlo con preferencia al lenguaje común), la capacidad de manejar mapas:
Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35
lo cual es extremadamente útil para depurar, etc.
No está listo para usar, pero muchas bibliotecas tienen algo similar:
Idioma común:
org.apache.commons.lang.StringUtils.join(list, conjunction);
Primavera:
org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);