gpt4 book ai didi

java - 具有多个参数的方法如何传递给采用列表的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:10 25 4
gpt4 key购买 nike

我无法理解该函数如何通过 lambda 传递给此方法

public class OrderUtil {
public static <I, O> List<O> runInBatches(List<I> inputList,
Function<List<I>, List<O>> functionToRunInBatches) {
return Lists.partition(inputList, BATCH_CHUNK_SIZE).stream()
.flatMap(batch -> functionToRunInBatches.apply(batch).stream())
.collect(toList());
}
}

我看到下面的代码,我无法理解下面的 lambda 函数如何转换为上面的 functionToRunInBatches? orderDao.getOrderForDates(...) 采用三个参数(订单、开始日期、结束日期),但我的函数采用一个列表并返回一个列表。这个调用如何正常工作?

我已阅读有关函数的教程和文档。

有人可以分解 lambda 是如何映射到上面的函数的吗?我无法想象这最终是如何工作的。

 private List<Order> getOrderForDates(List<Long> orderNumbers, 
tring startDate, String endDate){
return OrderUtil.runInBatches(orderNumbers,
orderBatch -> orderDAO.getOrderForDates(orderBatch, startDate, endDate));
}

最佳答案

编译器将 lambda 转换为新的 Function 对象。它使用 lambda 表达式中给出的代码覆盖 apply 方法。

所以这样:

private List<Order> getOrderForDates(List<Long> orderNumbers, String startDate, String endDate){
return OrderUtil.runInBatches(orderNumbers, orderBatch -> orderDAO.getOrderForDates(orderBatch, startDate, endDate));
}

等同于:

private List<Order> getOrderForDates(List<Long> orderNumbers, String startDate, String endDate){
return OrderUtil.runInBatches(orderNumbers, new Function<List<Long>, List<Order>>() {
@Override
public List<Order> apply(List<Long> orderBatch) {
return orderDAO.getOrderForDates(orderBatch, startDate, endDate);
}
});
}

然后,您的 runInBatches 方法只需对该 Function 对象调用 apply

关于java - 具有多个参数的方法如何传递给采用列表的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52559646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com