Java中如何简洁实现两个列表元素按序拼接及空值处理
简洁实现两个列表的拼接需求
首先注意你的代码里两个列表都用了list1作为变量名,这会导致编译错误,先修正命名:
List<String> strList = new ArrayList<>(Arrays.asList("a", "b", "c")); List<Integer> numList = new ArrayList<>(Arrays.asList(1, 2, 3));
下面提供两种更简洁的实现方式,比逐个检查的写法更优雅:
方法一:用Java Stream API(Java 8+适用)
Stream API可以通过链式调用快速实现过滤、转换和拼接,代码非常紧凑:
import java.util.stream.Collectors; import java.util.stream.IntStream; // ... String result = IntStream.range(0, Math.min(strList.size(), numList.size())) .filter(i -> strList.get(i) != null) // 跳过字符串为null的位置 .mapToObj(i -> numList.get(i) + strList.get(i)) // 将数字和对应字符串拼接成片段 .collect(Collectors.joining()); // 把所有片段拼接成最终字符串 // 测试:如果strList里第一个元素是null,结果会是"2b3c"
代码解释:
IntStream.range(...):生成从0到两个列表中较短长度的索引,避免索引越界filter(...):只保留字符串不为null的索引,直接跳过无效项mapToObj(...):把对应位置的数字和字符串拼成单个小字符串Collectors.joining():自动把所有小字符串无缝拼接成最终结果
方法二:优化的传统循环写法
如果还没接触过Stream,用StringBuilder(比直接用+拼接字符串更高效)写循环,代码也很简洁:
StringBuilder sb = new StringBuilder(); int maxLength = Math.min(strList.size(), numList.size()); for (int i = 0; i < maxLength; i++) { String s = strList.get(i); if (s != null) { sb.append(numList.get(i)).append(s); } } String result = sb.toString();
代码解释:
StringBuilder是专门用来高效拼接字符串的工具,避免每次+操作创建新的字符串对象- 循环只遍历到两个列表中较短的长度,防止越界
- 仅当字符串不为null时,才把对应的数字和字符串追加到结果里
内容的提问来源于stack exchange,提问作者user16201602
相关产品推荐
相关产品推荐

