All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.edgar615.util.vertx.task.Tuple6Task Maven / Gradle / Ivy

There is a newer version: 1.0.14
Show newest version
package com.github.edgar615.util.vertx.task;

import com.github.edgar615.util.vertx.function.Consumer6;
import com.github.edgar615.util.vertx.function.Consumer7;
import com.github.edgar615.util.vertx.function.Function6;
import com.github.edgar615.util.vertx.function.Function7;
import com.github.edgar615.util.vertx.function.Tuple6;
import io.vertx.core.Future;

/**
 * Created by Edgar on 2016/7/26.
 *
 * @author Edgar  Date 2016/7/26
 */
public interface Tuple6Task extends Task> {

  /**
   * 将Task> 转换为Tuple6Task
   *
   * @param task
   * @param 
   * @param  * @param 
   * @return Tuple6Task
   */
  default  Tuple6Task cast(
          final Task> task) {
    return new Tuple6TaskDelegate<>(task);
  }

  /**
   * 任务完成之后,将结果转换为其他对象.
   *
   * @param function function类
   * @param       转换后的类型
   * @return task
   */
  default  Task map(Function6 function) {
    return mapWithFallback(function, null);
  }

  /**
   * 任务完成之后,将结果转换为其他对象.
   *
   * @param function function类
   * @param fallback 如果function出现异常,回退的操作
   * @param       转换后的类型
   * @return task
   */
  default  Task mapWithFallback(Function6 function,
                                      Function7 fallback) {
    return mapWithFallback("map: " + function.getClass().getName(), function, fallback);
  }

  /**
   * 任务完成之后,将结果转换为其他对象.
   *
   * @param desc     任务描述
   * @param function function类
   * @param       转换后的类型
   * @return task
   */
  default  Task map(String desc, Function6 function) {
    return mapWithFallback(desc, function, null);
  }

  /**
   * 任务完成之后,将结果转换为其他对象.
   *
   * @param desc     任务描述
   * @param function function类
   * @param fallback 如果function出现异常,回退的操作
   * @param       转换后的类型
   * @return task
   */
  default  Task mapWithFallback(String desc, Function6 function,
                                      Function7 fallback) {
    if (fallback == null) {
      return map(desc, t -> function.apply(t.getT1(), t.getT2(),
                                           t.getT3(), t.getT4(), t.getT5(), t.getT6()));
    }
    return mapWithFallback(desc, t -> function.apply(t.getT1(), t.getT2(),
                                                     t.getT3(), t.getT4(), t.getT5(), t.getT6()),
                           (r, t) -> fallback.apply(r, t.getT1(), t.getT2(),
                                                    t.getT3(), t.getT4(), t.getT5(), t.getT6()));
  }


  /**
   * 任务完成后,根据结果做一些额外操作.
   *
   * @param consumer consumer类
   * @return task
   */
  default Tuple6Task andThen(Consumer6 consumer) {
    return andThenWithFallback(consumer, null);
  }

  /**
   * 任务完成后,根据结果做一些额外操作.
   *
   * @param consumer consumer类
   * @param fallback 如果consumer出现异常,回退的操作
   * @return task
   */
  default Tuple6Task andThenWithFallback(
          Consumer6 consumer,
          Consumer7 fallback) {
    return andThenWithFallback("andThen: " + consumer.getClass().getName(), consumer, fallback);
  }


  /**
   * 任务完成后,根据结果做一些额外操作.
   *
   * @param desc     任务描述
   * @param consumer consumer类
   * @return task
   */
  default Tuple6Task andThen(String desc,
                                                     Consumer6 consumer) {
    return andThenWithFallback(desc, consumer, null);
  }

  /**
   * 任务完成后,根据结果做一些额外操作.
   *
   * @param desc     任务描述
   * @param consumer consumer类
   * @param fallback 如果consumer出现异常,回退的操作
   * @return task
   */
  default Tuple6Task andThenWithFallback(
          String desc,
          Consumer6 consumer,
          Consumer7 fallback) {
    if (fallback == null) {
      return cast(andThen(desc, t -> consumer.accept(t.getT1(), t.getT2(),
                                                     t.getT3(), t.getT4(), t.getT5(), t.getT6())));
    }
    return cast(andThenWithFallback(desc, t -> consumer.accept(t.getT1(), t.getT2(),
                                                               t.getT3(), t.getT4(), t.getT5(),
                                                               t.getT6()),
                                    (r, t) -> fallback.accept(r, t.getT1(), t.getT2(),
                                                              t.getT3(), t.getT4(), t.getT5(),
                                                              t.getT6())));
  }

  /**
   * 任务完成之后,让结果传递给另外一个任务执行,futureFunction用来使用结果创建一个新的任务.
   *
   * @param function function类,将结果转换为一个新的future
   * @param 
   * @return
   */
  default  Task flatMap(Function6> function) {
    return flatMapWithFallback(function, null);
  }

  /**
   * 任务完成之后,让结果传递给另外一个任务执行,futureFunction用来使用结果创建一个新的任务.
   *
   * @param function function类,将结果转换为一个新的future
   * @param 
   * @return
   */
  default  Task flatMapWithFallback(Function6> function,
                                          Function7
                                                  fallback) {
    return flatMapWithFallback("flatMap: " + function.getClass().getName(),
                               function,
                               fallback);
  }

  /**
   * 任务完成之后,让结果传递给另外一个任务执行,futureFunction用来使用结果创建一个新的任务.
   *
   * @param desc     任务描述
   * @param function function类,将结果转换为一个新的future
   * @param 
   * @return
   */
  default  Task flatMap(String desc, Function6> function) {
    return flatMap(desc, t -> function.apply(t.getT1(), t.getT2(),
                                             t.getT3(), t.getT4(), t.getT5(), t.getT6()));
  }

  /**
   * 任务完成之后,让结果传递给另外一个任务执行,futureFunction用来使用结果创建一个新的任务.
   *
   * @param desc     任务描述
   * @param function function类,将结果转换为一个新的future
   * @param fallback 如果function出现异常,回退的操作. 这个回退操作,不再返回一个Future,而是直接返回一个特定的值
   * @param 
   * @return
   */
  default  Task flatMapWithFallback(String desc,
                                          Function6> function,
                                          Function7
                                                  fallback) {
    if (fallback == null) {
      return flatMap(desc, t -> function
              .apply(t.getT1(), t.getT2(), t.getT3(), t.getT4(), t.getT5(), t.getT6()));
    }
    return flatMapWithFallback(desc,
                               t -> function.apply(t.getT1(), t.getT2(),
                                                   t.getT3(), t.getT4(), t.getT5(), t.getT6()),
                               (r, t) -> fallback.apply(r, t.getT1(), t.getT2(), t.getT3(),
                                                        t.getT4(), t.getT5(), t.getT6()));
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy