本文介绍如何使用 java 8+ stream api 将两个等长或不等长的列表按索引位置并行拼接成字符串,自动跳过 null 元素,并提供可读、高效、函数式风格的解决方案。
本文介绍如何使用 java 8+ stream api 将两个等长或不等长的列表按索引位置并行拼接成字符串,自动跳过 null 元素,并提供可读、高效、函数式风格的解决方案。
在 Java 开发中,常需将两个列表(如 List
以下是一个完整、健壮的实现示例:
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ListZipper {
public static String zipAndConcat(List> list1, List> list2) {
int size = Math.min(list1.size(), list2.size());
return IntStream.range(0, size)
.filter(i -> list1.get(i) != null && list2.get(i) != null) // 跳过任一为 null 的项
.mapToObj(i -> list2.get(i).toString() + list1.get(i).toString()) // 注意:先数字后字母 → "1"+"a" → "1a"
.collect(Collectors.joining(""));
}
public static void main(String[] args) {
List<string> strings = Arrays.asList("a", null, "c");
List<integer> numbers = Arrays.asList(1, 2, 3);
String result = zipAndConcat(numbers, strings); // 输入顺序:numbers 在前 → 拼接为 "1a" + "3c" = "1a3c"
System.out.println(result); // 输出:1a3c
}
}</integer></string>
✅ 关键要点说明:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- IntStream.range(0, size) 生成安全索引流,避免 IndexOutOfBoundsException;
- .filter(i -> ...) 显式排除任一元素为 null 的索引项,满足“若 a 为 null 则跳过整个 '1a'”的需求;
- mapToObj 中按业务逻辑决定拼接顺序(如题干要求 "1a2b3c",即数字在前、字符串在后),注意参数传入顺序;
- Collectors.joining("") 高效聚合无分隔符字符串。
⚠️ 注意事项:
- 本方案默认以较短列表长度为上限(Math.min(...)),天然兼容不等长列表;
- 若需保留较长列表的剩余元素(如 "1a2b3c4d5e" 中 list1=[a,b,c], list2=[1,2,3,4,5]),需额外处理尾部,可扩展为双流合并逻辑;
- list1.get(i) 和 list2.get(i) 在 filter 后才调用,确保不会触发 NPE;但前提是原始列表本身不为 null(建议调用前校验)。
该方法体现了现代 Java 的表达力与安全性——无需手动维护索引变量、无需嵌套 if 判断,一行流式链式调用即可完成逻辑封装,既适合初学者理解函数式思维,也满足生产环境对健壮性与可维护性的要求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










