一、简介
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 评论