From 4a88a565bfbc5203c02830d3ea062fd0285a6b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=A5=B6=E5=A5=B6=E4=B8=8D=E5=96=9D=E6=A6=B4?= =?UTF-8?q?=E8=8E=B2=E7=89=9B=E5=A5=B6?= <858467019@qq.com> Date: Sat, 18 Oct 2025 12:52:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0zip=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=B0=86=E4=B8=A4=E4=B8=AA=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E4=B8=AD=E7=9A=84=E5=85=83=E7=B4=A0=E4=B8=80=E4=B8=80?= =?UTF-8?q?=E9=85=8D=E5=AF=B9=E5=B9=B6=E8=BF=94=E5=9B=9E=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E7=BB=93=E6=9E=9C=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/collection/ListUtil.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java index e1e521966..7a104c787 100755 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java @@ -11,6 +11,7 @@ import cn.hutool.core.util.PageUtil; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.BiFunction; import java.util.function.Consumer; /** @@ -721,4 +722,32 @@ public class ListUtil { } return list; } + + + /** + * 将两个列表的元素按照索引一一配对,通过指定的函数进行合并,返回一个新的结果列表。 + * 新列表的长度将以两个输入列表中较短的那个为准。 + * + * @param 第一个列表的元素类型 + * @param 第二个列表的元素类型 + * @param 结果列表的元素类型 + * @param listA 第一个列表 + * @param listB 第二个列表 + * @param zipper 合并函数,接收来自listA和listB的两个元素,返回一个结果元素 + * @return 合并后的新列表 + * @since 5.8.42 + */ + public static List zip(List listA, List listB, BiFunction zipper) { + if (CollUtil.isEmpty(listA) || CollUtil.isEmpty(listB)) { + return new ArrayList<>(); + } + Assert.notNull(zipper, "Zipper function must not be null"); + + final int size = Math.min(listA.size(), listB.size()); + final List result = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + result.add(zipper.apply(listA.get(i), listB.get(i))); + } + return result; + } }