You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向方法传入两个Lambda表达式实现列表获取与Integer提取?

搞定Lambda传参的方法定义问题

嘿,我看你想定义一个方法,传入两个Lambda来实现“获取条目列表+从每个条目提取Integer”的逻辑,现在的参数里Supplier<Integer> idGetter有点小问题——Supplier是无参的,没法拿到每个条目来提取值,咱们来调整一下:

核心问题修正

你需要把第二个Lambda的类型从Supplier<Integer>改成Function<T, Integer>——这里的T是你条目对象的类型,Function可以接收一个输入(也就是单个条目),然后返回提取出的Integer,这才符合“从条目中提取”的需求。

正确的方法定义

通用版本(支持任意条目类型)

如果你的条目是自定义对象(比如用户、订单这类),用泛型方法更灵活:

private <T> List<Integer> getRecentList(List<Integer> searchParams, 
                                        Function<List<Integer>, List<T>> listGetter, 
                                        Function<T, Integer> idGetter) {
    // 第一步:通过listGetter获取完整的条目列表
    List<T> itemList = listGetter.apply(searchParams);
    
    // 第二步:用idGetter逐个提取Integer,用Stream简化代码
    return itemList.stream()
                   .map(idGetter)
                   .collect(Collectors.toList());
}

简化版本(条目本身就是Integer)

如果你的条目列表本身就是List<Integer>,那提取逻辑就是返回自身,方法可以简化:

private List<Integer> getRecentList(List<Integer> searchParams, 
                                    Function<List<Integer>, List<Integer>> listGetter) {
    // 直接返回获取到的列表即可
    return listGetter.apply(searchParams);
    // 要是想保留提取逻辑的扩展性,也可以加个Function<Integer, Integer>参数,比如传i -> i
}

实际使用示例

假设你有个自定义的Order类,里面有getOrderId()方法返回Integer,咱们来调用这个方法:

// 自定义订单类
class Order {
    private Integer orderId;
    public Order(Integer orderId) { this.orderId = orderId; }
    public Integer getOrderId() { return orderId; }
}

// 调用示例
public void demo() {
    List<Integer> searchParams = Arrays.asList(1001, 1002, 1003);
    
    // 第一个Lambda:根据搜索参数获取订单列表(模拟从数据库查询)
    Function<List<Integer>, List<Order>> orderListGetter = params -> {
        List<Order> orders = new ArrayList<>();
        for (Integer param : params) {
            orders.add(new Order(param));
        }
        return orders;
    };
    
    // 第二个Lambda:从订单中提取订单ID(用方法引用更简洁)
    Function<Order, Integer> orderIdGetter = Order::getOrderId;
    
    // 调用方法得到结果
    List<Integer> recentOrderIds = getRecentList(searchParams, orderListGetter, orderIdGetter);
}

参数解释

  • List<Integer> searchParams:你的搜索参数集合,会传给第一个Lambda用来筛选/获取条目
  • Function<List<Integer>, List<T>> listGetter:第一个Lambda,负责接收搜索参数,返回对应的条目列表
  • Function<T, Integer> idGetter:第二个Lambda,负责接收单个条目,提取出你需要的Integer值

内容的提问来源于stack exchange,提问作者arcy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:10:45