在Java8中把列表转换为逗号分隔的字符串
●在Java 8中,将List<String>转换为以逗号分隔的List的所有值的字符串是非常简
单的。让我们来看看如何做到这一点。
●在Java 8中
●我们可以简单地编写String.join(.),传递一个分隔符和一个Iterable,新的
StringJoiner会做剩下的事情。
1.List<String> cities = Arrays.asList("Milan",
2.
"London",
3.
"New York",
4.
"San Francisco");
5.
6.String citiesCommaSeparated = String.join(",", cities);
7.
8.System.out.println(citiesCommaSeparated);
9.
10.//Output: Milan,London,New York,San Francis
●如果我们用流来工作,我们可以按以下方式写,仍然有相同的结果。
1.String citiesCommaSeparated = cities.stream()
2.
.
collect(Collectors.joining(","));
3.
4.
5.System.out.println(citiesCommaSeparated);
6.
7.//Output: Milan,London,New York,San Francisco
●注意:你可以静态地导入java.util.stream.Collectors.joining,如果你喜欢直接输
入 "joining"。
●在Java 7中
●看在过去的份上,让我们看看Java 7的实现。
1.private static final String SEPARATOR = ",";
2.
3.public static void main(String[] args) {
4.List<String> cities = Arrays.asList(
5."Milan",
6."London"
,
7."New Yo
rk",
8."San Fr
ancisco");
9.
10.StringBuilder csvBuilder = new StringBuilder();
11.
12.for(String city : cities){
13.csvBuilder.append(city);
14.csvBuilder.append(SEPARATOR);
15.}
16.
17.String csv = String();
18.System.out.println(csv);
19.
20.//OUTPUT: Milan,London,New York,San Francisco,
21.
22.//Remove last comma
23.csv = csv.substring(0, csv.length() - SEPARATOR.length());
24.
25.System.out.println(csv);
26.
27.//OUTPUT: Milan,London,New York,San Francisco
28.}
●正如你所看到的,它更加啰嗦,而且更容易犯错误,比如忘记删除最后一个逗号。你可
以用几种方法来实现这一点--比如把删除最后一个逗号的逻辑移到for-loop里面--但没有哪种实现方式会像Java 8中表达的声明式解决方案那样,具有说明性和易于理解。
●重点应该放在你想做的事情上--连接字符串的列表--而不是如何做。
●Java 8:在连接前对字符串进行操作
●如果你使用的是Stream,通过使用map()或通过使用filter()将一些字符串删除,就
可以很直接地按照你的喜好来操作字符串。我将在以后的文章中介绍这些主题。同时,这是一个简单的例子,说明如何在连接前将整个字符串转换成大写字母。
●Java 8: 从列表到大写字母的逗号分隔的字符串
1.String citiesCommaSeparated = cities.stream()
2.
.map(String::toUpperCase)
3.
.collect(Collectors.joining(","));
4.
5.//Output: MILAN,LONDON,NEW YORK,SAN FRANCISCO
●如果你想了解更多关于流的信息,我强烈建议你观看Venkat Subramaniam的这个很酷
的视频。
●让我们玩一玩
●学习的最好方法就是玩! 复制这个带有所有讨论过的实现的类,然后用它来玩。每一个
实现都有一个小测试。
1.amples;
2.
3.import static java.util.stream.Collectors.joining;
4.import static org.junit.Assert.assertEquals;
5.
6.import java.util.Arrays;
7.import java.util.List;
8.
9.import org.junit.Test;
10.
11.public class CsvUtil {
12.private static final String SEPARATOR = ",";
13.
14.
15.public static String toCsv(List < String > listToConvert) {
17.}
18.
19.@Test
20.public void toCsv_csvFromListOfString() {
21.List < String > cities = Arrays.asList(
22."Milan", "London", "New York", "San Francisco");
23.
24.String expected = "Milan,London,New York,San Francisco";
25.
26.assertEquals(expected, toCsv(cities));
27.}
28.
29.
30.public static String toCsvStream(List < String > listToConvert)
{
33.}
34.
35.@Test
36.public void toCsvStream_csvFromListOfString() {
37.List < String > cities = Arrays.asList(
38."Milan", "London", "New York", "San Francisco");
39.
40.String expected = "Milan,London,New York,San Francisco";
41.
42.assertEquals(expected, toCsv(cities));
43.}
44.
45.public static String toCsvJava7(List < String > listToConvert)
{
46.StringBuilder csvBuilder = new StringBuilder();
47.
48.for(String s: listToConvert) {
49.csvBuilder.append(s);
50.csvBuilder.append(SEPARATOR);
51.}
52.
53.String csv = String();
54.
55.//Remove last separator
56.dsWith(SEPARATOR)) {
57.csv = csv.substring(0, csv.length() - SEPARATOR.length());
58.}
59.
61.}
62.
63.@Test
64.public void toCsvJava7_csvFromListOfString() {
65.List < String > cities = Arrays.asList(
66."Milan", "London", "New York", "San Francisco");
67.
68.String expected = "Milan,London,New York,San Francisco";字符串截取逗号前面的
69.
70.assertEquals(expected, toCsvJava7(cities));
71.}
72.
73.
74.public static String toUpperCaseCsv(List < String > listToConve
rt) {
78.}
79.
80.@Test
81.public void toUpperCaseCsv_upperCaseCsvFromListOfString() {
82.List < String > cities = Arrays.asList(
83."Milan", "London", "New York", "San Francisco");
84.
85.String expected = "MILAN,LONDON,NEW YORK,SAN FRANCISCO";
86.
87.assertEquals(expected, toUpperCaseCsv(cities));
88.}
89.
90.}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。