You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:17:28