拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 java中将列表转换为逗号分隔的字符串

java中将列表转换为逗号分隔的字符串

白鹭 - 2022-10-08 2163 0 2

一、简介

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,以及多种形式的分隔符,如Stringchar

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(),将要转换的CollectionString分隔符作为参数:

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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *