一、简介
List转换仍然是一个热门话题,因为它是我们作为Java 开发人员经常做的事情。在本教程中,我们将学习如何使用四种不同的方法将String List转换为逗号分隔的String。
2.使用Java 8+
我们将使用自Java 8 以来可用的三个不同的类及其方法进行转换。
让我们将以下列表作为即将到来的示例的输入:
List<String> arraysAsList = Arrays.asList("ONE", "TWO", "THREE");2.1。String
首先,我们将使用String类,它具有许多用于String处理的实用程序并提供转换方法join():
String commaSeparatedString = String.join(",", arraysAsList);
assertThat(commaSeparatedString).isEqualTo("ONE,TWO,THREE");2.2.StringJoiner
其次,我们将使用StringJoiner类,它有一个接受CharSequence分隔符作为参数的构造函数:
StringJoiner stringJoiner = new StringJoiner(",");
arraysAsList.stream()
.forEach(v -> stringJoiner.add(v));
String commaSeparatedString = stringJoiner.toString();
assertThat(commaSeparatedString).isEqualTo("ONE,TWO,THREE");还有另一个构造函数,它接受一个CharSequence分隔符,一个CharSequence作为前缀,另一个作为后缀:
StringJoiner stringJoinerWithDelimiterPrefixSuffix = new StringJoiner(",", "[", "]");
arraysAsList.stream()
.forEach(v -> stringJoinerWithDelimiterPrefixSuffix.add(v));
String commaSeparatedStringWithDelimiterPrefixSuffix = stringJoinerWithDelimiterPrefixSuffix.toString();
assertThat(commaSeparatedStringWithDelimiterPrefixSuffix).isEqualTo("[ONE,TWO,THREE]");2.3.Collectors
第三,Collectors类提供了各种具有不同签名的实用程序和joining()方法。
首先让我们看看如何使用Collectors.joining()方法将collect()方法应用于Stream, 它将CharSequence分隔符作为输入:
String commaSeparatedUsingCollect = arraysAsList.stream()
.collect(Collectors.joining(","));
assertThat(commaSeparatedUsingCollect).isEqualTo("ONE,TWO,THREE");在我们的下一个示例中,我们将看到如何使用map()方法将列表的每个对象转换为String,然后应用方法collect()和Collectors. joining():
String commaSeparatedObjectToString = arraysAsList.stream()
.map(Object::toString)
.collect(Collectors.joining(","));
assertThat(commaSeparatedObjectToString).isEqualTo("ONE,TWO,THREE");接下来,我们将使用map()方法将列表元素转换为String,然后应用方法collect()和Collectors.joining():
String commaSeparatedStringValueOf = arraysAsList.stream()
.map(String::valueOf)
.collect(Collectors.joining(","));
assertThat(commaSeparatedStringValueOf).isEqualTo("ONE,TWO,THREE");现在,让我们像上面一样使用map(),然后是Collectors. joining()方法,它输入一个CharSequence分隔符,一个CharSequence作为前缀,一个CharSequence作为后缀:
String commaSeparatedStringValueOfWithDelimiterPrefixSuffix = arraysAsList.stream()
.map(String::valueOf)
.collect(Collectors.joining(",", "[", "]"));
assertThat(commaSeparatedStringValueOfWithDelimiterPrefixSuffix).isEqualTo("[ONE,TWO,THREE]");最后,我们将看到如何使用reduce()方法而不是collect()来转换列表:
String commaSeparatedUsingReduce = arraysAsList.stream()
.reduce((x, y) -> x + "," + y)
.get();
assertThat(commaSeparatedUsingReduce).isEqualTo("ONE,TWO,THREE");3. 使用Apache Commons Lang
或者,我们也可以使用Apache Commons Lang 库提供的实用程序类而不是Java 类。
我们必须在pom.xml文件中添加一个依赖项才能使用Apache 的StringUtils类:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency>
join()方法有各种实现,可以接受输入,如一系列元素、值的Iterator,以及多种形式的分隔符,如String或char:
String commaSeparatedString = StringUtils.join(arraysAsList, ",");
assertThat(commaSeparatedString).isEqualTo("ONE,TWO,THREE");如果传递给join()的信息是一个Object数组,它也需要一个int作为startIndex 和一个int作为endIndex:
String commaSeparatedStringIndex = StringUtils.join(arraysAsList.toArray(), ",", 0, 3);
assertThat(commaSeparatedStringIndex).isEqualTo("ONE,TWO,THREE");4.使用Spring Core
Spring Core 库类似地提供了一个实用程序类,该类具有用于这种类型转换的方法。
我们首先在pom.xml文件中添加一个依赖项以使用Spring 的CoreStringUtils类:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.22</version> </dependency>
Spring 的核心StringUtils类提供了一个方法,collectionToCommaDelimitedString(),它以逗号作为默认分隔符,将要转换的Collection作为参数:
String collectionToCommaDelimitedString = StringUtils.collectionToCommaDelimitedString(arraysAsList);
assertThat(collectionToCommaDelimitedString).isEqualTo("ONE,TWO,THREE");第二种方法collectionToDelimitedString(),将要转换的Collection和String分隔符作为参数:
String collectionToDelimitedString = StringUtils.collectionToDelimitedString(arraysAsList, ",");
assertThat(collectionToDelimitedString).isEqualTo("ONE,TWO,THREE");5. 使用谷歌番石榴
最后,我们将使用Google Guava 库。
我们必须在pom.xml文件中添加一个依赖项才能使用Google 的GuavaJoiner类:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.1-jre</version> </dependency>
Google 的GuavaJoiner类提供了我们可以应用的各种方法。
第一个方法是on(),它将String作为分隔符参数,然后第二个方法是join()方法,它将具有要转换的值的Iterable作为参数:
String commaSeparatedString = Joiner.on(",")
.join(arraysAsList);
assertThat(commaSeparatedString).isEqualTo("ONE,TWO,THREE");让我们为下一个示例使用另一个包含一些null值的列表:
List<String> arraysAsListWithNull = Arrays.asList("ONE", null, "TWO", null, "THREE");鉴于此,我们可以在on()和join()之间使用其他方法,其中之一是skipNulls()方法。我们可以使用它来避免从Iterable:内部转换null值:
String commaSeparatedStringSkipNulls = Joiner.on(",")
.skipNulls()
.join(arraysAsListWithNull);
assertThat(commaSeparatedStringSkipNulls).isEqualTo("ONE,TWO,THREE");另一种选择是使用useForNull(),它将String值作为参数替换Iterable中的null值进行转换:
String commaSeparatedStringUseForNull = Joiner.on(",")
.useForNull(" ")
.join(arraysAsListWithNull);
assertThat(commaSeparatedStringUseForNull).isEqualTo("ONE, ,TWO, ,THREE");六,结论
在本文中,我们看到了将List转换为逗号分隔的String的各种String。最后,由我们决定哪些库和实用程序类更适合我们的目的。
0 评论