Merge pull request #4102 from liunainaibuheliulianniunai/v5-dev

增加zip函数,可以将两个列表中的元素一一配对并返回一个新的结果列表
This commit is contained in:
Golden Looly 2025-10-18 19:24:34 +08:00 committed by GitHub
commit ddd3eb34f6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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 <A> 第一个列表的元素类型
* @param <B> 第二个列表的元素类型
* @param <R> 结果列表的元素类型
* @param listA 第一个列表
* @param listB 第二个列表
* @param zipper 合并函数接收来自listA和listB的两个元素返回一个结果元素
* @return 合并后的新列表
* @since 5.8.42
*/
public static <A, B, R> List<R> zip(List<A> listA, List<B> listB, BiFunction<A, B, R> 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<R> result = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
result.add(zipper.apply(listA.get(i), listB.get(i)));
}
return result;
}
}