在写Java程序时,经常会遇到需要把一串文本数据转换成集合的情况。比如从配置文件读出一串用逗号隔开的名字,像“张三,李四,王五”,想一个个处理,最方便的方式就是转成List。
使用Arrays.asList()快速转换
如果字符串是用特定分隔符分开的,比如逗号、空格,可以先用split方法拆成数组,再转成List。这是最常见也最简单的方法。
String str = "apple,banana,orange";
List<String> list = Arrays.asList(str.split(","));
这样list里就包含了三个元素。注意,这种方式生成的List是固定长度的,不能添加或删除元素。如果后续需要修改,得再包装一层。
转成可变List
有时候要往List里加新元素,上面那种方式会报错。解决办法是用ArrayList重新包装一下。
String str = "red,green,blue";
List<String> list = new ArrayList<>(Arrays.asList(str.split(",")));
现在这个list就可以调用add、remove这些方法了,用起来更灵活。
处理数字字符串
如果字符串里是数字,比如“1,2,3,4”,想转成Integer类型的List,就不能直接用了。得配合流(Stream)来处理。
String str = "1,2,3,4";
List<Integer> list = Arrays.stream(str.split(","))
.map(Integer::valueOf)
.collect(Collectors.toList());
这段代码先把字符串按逗号拆开,然后每项转成Integer,最后收集到List里。这种写法在处理表单提交的数字ID列表时特别有用。
去掉空格和空项
实际中经常遇到格式不规范的字符串,比如“ a , b , , c ”,中间有空格还有空项。这时候可以加一步过滤。
String str = " a , b , , c ";
List<String> list = Arrays.stream(str.split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
map(String::trim)去掉前后空格,filter排除空字符串,最终得到干净的[a, b, c]。
封装成工具方法
项目里如果多处要用,可以把逻辑抽出来。
public static List<String> stringToList(String str, String delimiter) {
if (str == null || str.trim().isEmpty()) {
return new ArrayList<>();
}
return Arrays.stream(str.split(Pattern.quote(delimiter)))
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
}
这样以后调用stringToList(input, ",")就能安全转换,避免重复写一堆流操作。