mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-12-07 01:28:34 +08:00
Merge pull request #4102 from liunainaibuheliulianniunai/v5-dev
增加zip函数,可以将两个列表中的元素一一配对并返回一个新的结果列表
This commit is contained in:
commit
ddd3eb34f6
@ -11,6 +11,7 @@ import cn.hutool.core.util.PageUtil;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -721,4 +722,32 @@ public class ListUtil {
|
|||||||
}
|
}
|
||||||
return list;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user