函数式接口Consumer和Function的使用示例

# Consumer(适用场景:日志、保存、通知;我拿到了结果,做点事就行)

1. 定义uploadService接口
void analysisV3(String yid, String sourceurl, Consumer<Analysis> callback);

2. 实现uploadService实现类
@Async// 异步
public void analysisV3(String yid, String sourceurl, Consumer<Analysis> callback) {
  logger.info("===开始解析==");
  Analysis a = getAnalysis(yid, "");// 解析
  try {
    Thread.sleep(1000 * 3);// 延时
  } catch (InterruptedException e) {
    throw new RuntimeException(e);
  }
  callback.accept(a);// 执行传入的Consumer代码
}

3. 调用
uploadService.analysisV3("uuid", "d:/xxxxxxxx", analysis -> {
  logger.info("===1===id:{},yid:{},sourceurl:{},resulturl:{}", analysis.getId(), analysis.getYid(), analysis.getSourceurl(), analysis.getResulturl());
});


# Function(适用场景:转换、计算、映射数据;我拿到了结果,处理后返回新结果)

1. 定义uploadService接口
void analysisV4(String yid, Function<String, Analysis> callback);

2. 实现uploadService实现类
@Async// 异步
public void analysisV4(String yid, Function<String, Analysis> callback) {
  Analysis analysis = callback.apply("str1");// 执行传入的Function代码(格式:Function<入参, 返回参>)
  logger.info("===1===id:{},yid:{},sourceurl:{},resulturl:{}", analysis.getId(), analysis.getYid(),
                    analysis.getSourceurl(), analysis.getResulturl());
}

3. 调用
uploadService.analysisV4("uuid", str1 -> {
  logger.info("===1===str1:{}", str1);
  logger.info("===开始解析==");
  Analysis a = getAnalysis(yid, "");// 解析
  try {
    Thread.sleep(1000 * 3);// 延时
  } catch (InterruptedException e) {
    throw new RuntimeException(e);
  }
  return a;
});

点击数:8
创建时间:2026-01-08 13:17:57
更新时间:2026-01-08 14:01:34