在日常开发中,经常会遇到需要把一个字符串转换成List的情况。比如从配置文件读取了一串IP地址,格式是用逗号分隔的,现在想把它们一个个存进List里方便后续处理。这时候,字符串转List就成了一个小而关键的操作。
使用Arrays.asList()结合split()
这是最常见也最简单的方式。假设你有一串用逗号分隔的设备名称:
String str = "router,switch,ap,repeater";
List<String> deviceList = Arrays.asList(str.split(","));
这样就得到了一个包含四个网络设备名称的List。注意,这个List是固定大小的,不能直接add或remove元素。如果后续需要修改,得再包装一层:
List<String> deviceList = new ArrayList<>(Arrays.asList(str.split(",")));
使用Java 8的Stream流
如果你用的是Java 8及以上版本,可以借助Stream让代码更清晰:
String str = "192.168.1.1,192.168.1.2,192.168.1.3";
List<String> ipList = Arrays.stream(str.split(","))
.map(String::trim)
.collect(Collectors.toList());
这里的map(String::trim)是为了去掉可能存在的空格,比如输入是"192.168.1.1, 192.168.1.2"这种带空格的情况,处理起来更安全。
去除空值或无效项
实际场景中,字符串里可能夹着空项,比如两个逗号连在一起:"ap,,repeater"。这时候可以直接过滤掉:
String str = "ap,,repeater,,bridge";
List<String> validDevices = Arrays.stream(str.split(","))
.filter(s -> !s.trim().isEmpty())
.collect(Collectors.toList());
这样得到的List就不会包含空字符串了,避免后续处理出错。
转换成其他类型的List
有时候不只是要字符串List,比如你要把一串端口号转成Integer的List:
String ports = "80,443,8080,9000";
List<Integer> portList = Arrays.stream(ports.split(","))
.map(Integer::parseInt)
.collect(Collectors.toList());
只要确保字符串内容能正常解析,这种方式就很高效。
这些方法在处理网络配置、设备列表、参数解析时都很实用。选哪种方式主要看你的JDK版本和具体需求,小项目用第一种就够了,复杂点的建议上Stream,代码更干净也更容易维护。