有没有高效方法将字符串列表转换为整数嵌套列表?
将字符串列表转换为整数嵌套列表的巧妙实现
嘿,你的思路方向是对的,但目前的代码只处理了列表里的第一个元素,没法得到你想要的嵌套整数列表。这里有几种更简洁且符合需求的实现方式:
基础嵌套Stream实现
这是最直接的优化方式,通过两层Stream遍历处理,一次性生成嵌套列表:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> coords = Arrays.asList("0,0,0,0", "1,1,1,1"); List<List<Integer>> nestedIntList = coords.stream() // 遍历每个字符串,将其转换为Integer子列表 .map(coordStr -> Arrays.stream(coordStr.split(",")) .map(Integer::parseInt) // 用方法引用替代Lambda,代码更简洁 .collect(Collectors.toList())) .collect(Collectors.toList()); // 输出结果:[[0, 0, 0, 0], [1, 1, 1, 1]] System.out.println(nestedIntList); } }
Java 16+简化版
如果你的项目使用Java 16或更高版本,可以用新增的Stream.toList()方法替代Collectors.toList(),进一步简化代码:
List<String> coords = Arrays.asList("0,0,0,0", "1,1,1,1"); List<List<Integer>> nestedIntList = coords.stream() .map(s -> Arrays.stream(s.split(",")) .map(Integer::parseInt) .toList()) .toList();
额外提示(可选)
如果你的输入字符串可能包含非数字内容(比如空串、字母等),可以添加异常处理或过滤逻辑,避免NumberFormatException:
List<List<Integer>> nestedIntList = coords.stream() .map(s -> Arrays.stream(s.split(",")) .filter(str -> str.matches("\\d+")) // 先过滤出纯数字字符串 .map(str -> { try { return Integer.parseInt(str); } catch (NumberFormatException e) { return 0; // 或设置其他符合业务需求的默认值 } }) .toList()) .toList();
内容的提问来源于stack exchange,提问作者Matteo Peluso
相关产品推荐
相关产品推荐

