Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 44.22 KB | None | 0 0
  1. package ru.swayfarer.swl.functions.staticargs;
  2. /*
  3.  * Автоматически сгенерировано с помощью ru.swayfarer.swl.functions.gen.FunctionsGenerator
  4.  */
  5.  
  6. import java.util.Comparator;
  7. import java.util.function.Consumer;
  8. import ru.swayfarer.swl.annotation.InternalElem;
  9. import java.util.function.Predicate;
  10. import ru.swayfarer.swl.utils.JavaUtils;
  11. import java.util.function.Function;
  12.  
  13. import ru.swayfarer.swl.ref.IReference;
  14.  
  15. @SuppressWarnings({"unchecked", "rawtypes"})
  16. public class Generated {
  17.  
  18.  
  19.  
  20. @FunctionalInterface
  21. public static interface IFunction0<Ret_Type> extends IFunctionStaticArgs {
  22.  
  23.     @Deprecated
  24.     @Override
  25.     default void process(IReference returnValue, Object... args)
  26.     {
  27.         returnValue.setValue(apply());
  28.     }
  29.    
  30.     /**
  31.      * Получить ничего не возвращающую функцию
  32.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  33.      * @return Новую функцию
  34.      */
  35.     static  IFunction0NoR consumerOf(IFunction0NoR methodReference) {
  36.         return () -> {methodReference.apply();} ;
  37.     }
  38.    
  39.     /**
  40.      * Применить функцию. Дубль для {@link #apply(Object)}
  41.      * @return Возвращаемое значение функции
  42.      */
  43.     default Ret_Type process() {
  44.         return apply();
  45.     }
  46.    
  47.     /**
  48.      * Применить функцию
  49.      * @return Возвращаемое значение функции
  50.      */
  51.     public Ret_Type apply();
  52.    
  53.    
  54.     /**
  55.      * Получить старндартный Java-{@link Runnable}
  56.      * @return Новый {@link Runnable}
  57.      */
  58.     public default Runnable asJavaRunnable()
  59.     {
  60.         return () -> apply();
  61.     }
  62.    
  63.    
  64.    
  65.    
  66.     /**
  67.      * Добавить 'pre-функцию' функцию
  68.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  69.      * @return Новую функцию, свянанную цепочкой
  70.      */
  71.     public default IFunction0<Ret_Type> andBefore(IFunction0<Ret_Type> nextFun)
  72.     {
  73.         return () -> {
  74.             nextFun.apply();
  75.             return apply();
  76.         };
  77.     }
  78.    
  79.     /**
  80.      * Добавить 'post-функцию' функцию
  81.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  82.      * @return Новую функцию, свянанную цепочкой
  83.      */
  84.     public default IFunction0<Ret_Type> andThan(IFunction0<Ret_Type> nextFun)
  85.     {
  86.         return () -> {
  87.             apply();
  88.             return nextFun.apply();
  89.         };
  90.     }
  91.    
  92.     /**
  93.      * Получить функцию без возвращаемого типа
  94.      * @return Новую фунцию
  95.      */
  96.     public default IFunction0NoR asNoReturnFun()
  97.     {
  98.         return () -> apply();
  99.     }
  100. }
  101.  
  102. /**
  103.  * Версия функции IFunction0 без возвращаемого типа (NoR = No return)
  104.  * @author swayfarer
  105.  */
  106. @FunctionalInterface
  107. public static interface IFunction0NoR extends IFunction0<Void> {
  108.    
  109.     /**
  110.      * Получить ничего не возвращающую функцию
  111.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  112.      * @return Новую функцию
  113.      */
  114.     static  IFunction0NoR valueOf(IFunction0NoR methodReference) {
  115.         return () -> {methodReference.apply();} ;
  116.     }
  117.    
  118.     public default Void apply()
  119.     {
  120.         applyNoR();
  121.         return null;
  122.     }
  123.    
  124.     public void applyNoR();
  125.    
  126.     /**
  127.      * Добавить 'pre-функцию' функцию
  128.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  129.      */
  130.     public default IFunction0NoR andBefore(IFunction0NoR nextFun)
  131.     {
  132.         return () -> {
  133.             nextFun.apply();
  134.             apply();
  135.         };
  136.     }
  137.    
  138.     /**
  139.      * Добавить 'post-функцию' функцию
  140.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  141.      */
  142.     public default IFunction0NoR andThan(IFunction0NoR nextFun)
  143.     {
  144.         return () -> {
  145.             apply();
  146.             nextFun.apply();
  147.         };
  148.     }
  149.    
  150. }
  151.  
  152.  
  153. @FunctionalInterface
  154. public static interface IFunction1<Arg1, Ret_Type> extends IFunctionStaticArgs {
  155.  
  156.     @Deprecated
  157.     @Override
  158.     default void process(IReference returnValue, Object... args)
  159.     {
  160.         returnValue.setValue(apply((Arg1) args[1]));
  161.     }
  162.    
  163.     /**
  164.      * Получить ничего не возвращающую функцию
  165.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  166.      * @return Новую функцию
  167.      */
  168.     static <Arg1> IFunction1NoR<Arg1> consumerOf(IFunction1NoR<Arg1> methodReference) {
  169.         return (arg1) -> {methodReference.apply(arg1);} ;
  170.     }
  171.    
  172.     /**
  173.      * Применить функцию. Дубль для {@link #apply(Object)}
  174.      * @return Возвращаемое значение функции
  175.      */
  176.     default Ret_Type process(Arg1 arg1) {
  177.         return apply(arg1);
  178.     }
  179.    
  180.     /**
  181.      * Применить функцию
  182.      * @return Возвращаемое значение функции
  183.      */
  184.     public Ret_Type apply(Arg1 arg1);
  185.    
  186.    
  187.    
  188.     /**
  189.      * Получить стандартный Java-{@link Consumer}
  190.      * @return Возвращает новую функцию
  191.      */
  192.     public default Consumer<Arg1> asJavaConsumer() {
  193.         return (arg1) -> apply(arg1);
  194.     }
  195.    
  196.     /**
  197.      * Получить старнадрный Java-{@link Predicate}
  198.      * @return Возвращает новый Java-{@link Predicate}
  199.      */
  200.     public default Predicate<Arg1> asJavaPredicate()
  201.     {
  202.         return new Predicate<Arg1>()
  203.         {
  204.             @Override
  205.             public boolean test(Arg1 t)
  206.             {
  207.                 Object ret = apply(t);
  208.                
  209.                 if (ret == null)
  210.                     JavaUtils.illegalArgument("The method asJavaPredicate() is available only for functions that return a no-null value!");
  211.                
  212.                 if (ret == null || !(ret instanceof Boolean))
  213.                     JavaUtils.illegalArgument("The method asJavaPredicate() is available only for functions that return a boolean value!");
  214.                
  215.                 return (Boolean) ret;
  216.             }
  217.         };
  218.     }
  219.    
  220.     /**
  221.      * Получить стандартную Java-{@link Function}
  222.      * @return Возвращает новую {@link Function}
  223.      */
  224.     public default Function<Arg1, Ret_Type> asJavaFunction()
  225.     {
  226.         return (arg1) -> apply(arg1);
  227.     }
  228.    
  229.    
  230.    
  231.     /**
  232.      * Добавить 'pre-функцию' функцию
  233.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  234.      * @return Новую функцию, свянанную цепочкой
  235.      */
  236.     public default IFunction1<Arg1, Ret_Type> andBefore(IFunction1<Arg1, Ret_Type> nextFun)
  237.     {
  238.         return (arg1) -> {
  239.             nextFun.apply(arg1);
  240.             return apply(arg1);
  241.         };
  242.     }
  243.    
  244.     /**
  245.      * Добавить 'post-функцию' функцию
  246.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  247.      * @return Новую функцию, свянанную цепочкой
  248.      */
  249.     public default IFunction1<Arg1, Ret_Type> andThan(IFunction1<Arg1, Ret_Type> nextFun)
  250.     {
  251.         return (arg1) -> {
  252.             apply(arg1);
  253.             return nextFun.apply(arg1);
  254.         };
  255.     }
  256.    
  257.     /**
  258.      * Получить функцию без возвращаемого типа
  259.      * @return Новую фунцию
  260.      */
  261.     public default IFunction1NoR<Arg1> asNoReturnFun()
  262.     {
  263.         return (arg1) -> apply(arg1);
  264.     }
  265. }
  266.  
  267. /**
  268.  * Версия функции IFunction1 без возвращаемого типа (NoR = No return)
  269.  * @author swayfarer
  270.  */
  271. @FunctionalInterface
  272. public static interface IFunction1NoR<Arg1> extends IFunction1<Arg1, Void> {
  273.    
  274.     /**
  275.      * Получить ничего не возвращающую функцию
  276.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  277.      * @return Новую функцию
  278.      */
  279.     static <Arg1> IFunction1NoR<Arg1> valueOf(IFunction1NoR<Arg1> methodReference) {
  280.         return (arg1) -> {methodReference.apply(arg1);} ;
  281.     }
  282.    
  283.     public default Void apply(Arg1 arg1)
  284.     {
  285.         applyNoR(arg1);
  286.         return null;
  287.     }
  288.    
  289.     public void applyNoR(Arg1 arg1);
  290.    
  291.     /**
  292.      * Добавить 'pre-функцию' функцию
  293.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  294.      */
  295.     public default IFunction1NoR<Arg1> andBefore(IFunction1NoR<Arg1> nextFun)
  296.     {
  297.         return (arg1) -> {
  298.             nextFun.apply(arg1);
  299.             apply(arg1);
  300.         };
  301.     }
  302.    
  303.     /**
  304.      * Добавить 'post-функцию' функцию
  305.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  306.      */
  307.     public default IFunction1NoR<Arg1> andThan(IFunction1NoR<Arg1> nextFun)
  308.     {
  309.         return (arg1) -> {
  310.             apply(arg1);
  311.             nextFun.apply(arg1);
  312.         };
  313.     }
  314.    
  315. }
  316.  
  317.  
  318. @FunctionalInterface
  319. public static interface IFunction2<Arg1, Arg2, Ret_Type> extends IFunctionStaticArgs {
  320.  
  321.     @Deprecated
  322.     @Override
  323.     default void process(IReference returnValue, Object... args)
  324.     {
  325.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3]));
  326.     }
  327.    
  328.     /**
  329.      * Получить ничего не возвращающую функцию
  330.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  331.      * @return Новую функцию
  332.      */
  333.     static <Arg1, Arg2> IFunction2NoR<Arg1, Arg2> consumerOf(IFunction2NoR<Arg1, Arg2> methodReference) {
  334.         return (arg1, arg2) -> {methodReference.apply(arg1, arg2);} ;
  335.     }
  336.    
  337.     /**
  338.      * Применить функцию. Дубль для {@link #apply(Object)}
  339.      * @return Возвращаемое значение функции
  340.      */
  341.     default Ret_Type process(Arg1 arg1, Arg2 arg2) {
  342.         return apply(arg1, arg2);
  343.     }
  344.    
  345.     /**
  346.      * Применить функцию
  347.      * @return Возвращаемое значение функции
  348.      */
  349.     public Ret_Type apply(Arg1 arg1, Arg2 arg2);
  350.    
  351.    
  352.    
  353.    
  354.     /**
  355.      * Получить стандартный Java-{@link Comparator}
  356.      * @return Возвращает новую функцию
  357.      */
  358.     public default Comparator asJavaComparator()  {
  359.        
  360.         return new Comparator()
  361.         {
  362.             @Override
  363.             public int compare(Object arg1, Object arg2)
  364.             {
  365.                 return (Integer) apply((Arg1) arg1, (Arg2) arg2);
  366.             }
  367.         };
  368.     }
  369.    
  370.    
  371.     /**
  372.      * Добавить 'pre-функцию' функцию
  373.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  374.      * @return Новую функцию, свянанную цепочкой
  375.      */
  376.     public default IFunction2<Arg1, Arg2, Ret_Type> andBefore(IFunction2<Arg1, Arg2, Ret_Type> nextFun)
  377.     {
  378.         return (arg1, arg2) -> {
  379.             nextFun.apply(arg1, arg2);
  380.             return apply(arg1, arg2);
  381.         };
  382.     }
  383.    
  384.     /**
  385.      * Добавить 'post-функцию' функцию
  386.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  387.      * @return Новую функцию, свянанную цепочкой
  388.      */
  389.     public default IFunction2<Arg1, Arg2, Ret_Type> andThan(IFunction2<Arg1, Arg2, Ret_Type> nextFun)
  390.     {
  391.         return (arg1, arg2) -> {
  392.             apply(arg1, arg2);
  393.             return nextFun.apply(arg1, arg2);
  394.         };
  395.     }
  396.    
  397.     /**
  398.      * Получить функцию без возвращаемого типа
  399.      * @return Новую фунцию
  400.      */
  401.     public default IFunction2NoR<Arg1, Arg2> asNoReturnFun()
  402.     {
  403.         return (arg1, arg2) -> apply(arg1, arg2);
  404.     }
  405. }
  406.  
  407. /**
  408.  * Версия функции IFunction2 без возвращаемого типа (NoR = No return)
  409.  * @author swayfarer
  410.  */
  411. @FunctionalInterface
  412. public static interface IFunction2NoR<Arg1, Arg2> extends IFunction2<Arg1, Arg2, Void> {
  413.    
  414.     /**
  415.      * Получить ничего не возвращающую функцию
  416.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  417.      * @return Новую функцию
  418.      */
  419.     static <Arg1, Arg2> IFunction2NoR<Arg1, Arg2> valueOf(IFunction2NoR<Arg1, Arg2> methodReference) {
  420.         return (arg1, arg2) -> {methodReference.apply(arg1, arg2);} ;
  421.     }
  422.    
  423.     public default Void apply(Arg1 arg1, Arg2 arg2)
  424.     {
  425.         applyNoR(arg1, arg2);
  426.         return null;
  427.     }
  428.    
  429.     public void applyNoR(Arg1 arg1, Arg2 arg2);
  430.    
  431.     /**
  432.      * Добавить 'pre-функцию' функцию
  433.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  434.      */
  435.     public default IFunction2NoR<Arg1, Arg2> andBefore(IFunction2NoR<Arg1, Arg2> nextFun)
  436.     {
  437.         return (arg1, arg2) -> {
  438.             nextFun.apply(arg1, arg2);
  439.             apply(arg1, arg2);
  440.         };
  441.     }
  442.    
  443.     /**
  444.      * Добавить 'post-функцию' функцию
  445.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  446.      */
  447.     public default IFunction2NoR<Arg1, Arg2> andThan(IFunction2NoR<Arg1, Arg2> nextFun)
  448.     {
  449.         return (arg1, arg2) -> {
  450.             apply(arg1, arg2);
  451.             nextFun.apply(arg1, arg2);
  452.         };
  453.     }
  454.    
  455. }
  456.  
  457.  
  458. @FunctionalInterface
  459. public static interface IFunction3<Arg1, Arg2, Arg3, Ret_Type> extends IFunctionStaticArgs {
  460.  
  461.     @Deprecated
  462.     @Override
  463.     default void process(IReference returnValue, Object... args)
  464.     {
  465.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3], (Arg3) args[5]));
  466.     }
  467.    
  468.     /**
  469.      * Получить ничего не возвращающую функцию
  470.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  471.      * @return Новую функцию
  472.      */
  473.     static <Arg1, Arg2, Arg3> IFunction3NoR<Arg1, Arg2, Arg3> consumerOf(IFunction3NoR<Arg1, Arg2, Arg3> methodReference) {
  474.         return (arg1, arg2, arg3) -> {methodReference.apply(arg1, arg2, arg3);} ;
  475.     }
  476.    
  477.     /**
  478.      * Применить функцию. Дубль для {@link #apply(Object)}
  479.      * @return Возвращаемое значение функции
  480.      */
  481.     default Ret_Type process(Arg1 arg1, Arg2 arg2, Arg3 arg3) {
  482.         return apply(arg1, arg2, arg3);
  483.     }
  484.    
  485.     /**
  486.      * Применить функцию
  487.      * @return Возвращаемое значение функции
  488.      */
  489.     public Ret_Type apply(Arg1 arg1, Arg2 arg2, Arg3 arg3);
  490.    
  491.    
  492.    
  493.    
  494.     /**
  495.      * Добавить 'pre-функцию' функцию
  496.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  497.      * @return Новую функцию, свянанную цепочкой
  498.      */
  499.     public default IFunction3<Arg1, Arg2, Arg3, Ret_Type> andBefore(IFunction3<Arg1, Arg2, Arg3, Ret_Type> nextFun)
  500.     {
  501.         return (arg1, arg2, arg3) -> {
  502.             nextFun.apply(arg1, arg2, arg3);
  503.             return apply(arg1, arg2, arg3);
  504.         };
  505.     }
  506.    
  507.     /**
  508.      * Добавить 'post-функцию' функцию
  509.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  510.      * @return Новую функцию, свянанную цепочкой
  511.      */
  512.     public default IFunction3<Arg1, Arg2, Arg3, Ret_Type> andThan(IFunction3<Arg1, Arg2, Arg3, Ret_Type> nextFun)
  513.     {
  514.         return (arg1, arg2, arg3) -> {
  515.             apply(arg1, arg2, arg3);
  516.             return nextFun.apply(arg1, arg2, arg3);
  517.         };
  518.     }
  519.    
  520.     /**
  521.      * Получить функцию без возвращаемого типа
  522.      * @return Новую фунцию
  523.      */
  524.     public default IFunction3NoR<Arg1, Arg2, Arg3> asNoReturnFun()
  525.     {
  526.         return (arg1, arg2, arg3) -> apply(arg1, arg2, arg3);
  527.     }
  528. }
  529.  
  530. /**
  531.  * Версия функции IFunction3 без возвращаемого типа (NoR = No return)
  532.  * @author swayfarer
  533.  */
  534. @FunctionalInterface
  535. public static interface IFunction3NoR<Arg1, Arg2, Arg3> extends IFunction3<Arg1, Arg2, Arg3, Void> {
  536.    
  537.     /**
  538.      * Получить ничего не возвращающую функцию
  539.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  540.      * @return Новую функцию
  541.      */
  542.     static <Arg1, Arg2, Arg3> IFunction3NoR<Arg1, Arg2, Arg3> valueOf(IFunction3NoR<Arg1, Arg2, Arg3> methodReference) {
  543.         return (arg1, arg2, arg3) -> {methodReference.apply(arg1, arg2, arg3);} ;
  544.     }
  545.    
  546.     public default Void apply(Arg1 arg1, Arg2 arg2, Arg3 arg3)
  547.     {
  548.         applyNoR(arg1, arg2, arg3);
  549.         return null;
  550.     }
  551.    
  552.     public void applyNoR(Arg1 arg1, Arg2 arg2, Arg3 arg3);
  553.    
  554.     /**
  555.      * Добавить 'pre-функцию' функцию
  556.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  557.      */
  558.     public default IFunction3NoR<Arg1, Arg2, Arg3> andBefore(IFunction3NoR<Arg1, Arg2, Arg3> nextFun)
  559.     {
  560.         return (arg1, arg2, arg3) -> {
  561.             nextFun.apply(arg1, arg2, arg3);
  562.             apply(arg1, arg2, arg3);
  563.         };
  564.     }
  565.    
  566.     /**
  567.      * Добавить 'post-функцию' функцию
  568.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  569.      */
  570.     public default IFunction3NoR<Arg1, Arg2, Arg3> andThan(IFunction3NoR<Arg1, Arg2, Arg3> nextFun)
  571.     {
  572.         return (arg1, arg2, arg3) -> {
  573.             apply(arg1, arg2, arg3);
  574.             nextFun.apply(arg1, arg2, arg3);
  575.         };
  576.     }
  577.    
  578. }
  579.  
  580.  
  581. @FunctionalInterface
  582. public static interface IFunction4<Arg1, Arg2, Arg3, Arg4, Ret_Type> extends IFunctionStaticArgs {
  583.  
  584.     @Deprecated
  585.     @Override
  586.     default void process(IReference returnValue, Object... args)
  587.     {
  588.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3], (Arg3) args[5], (Arg4) args[7]));
  589.     }
  590.    
  591.     /**
  592.      * Получить ничего не возвращающую функцию
  593.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  594.      * @return Новую функцию
  595.      */
  596.     static <Arg1, Arg2, Arg3, Arg4> IFunction4NoR<Arg1, Arg2, Arg3, Arg4> consumerOf(IFunction4NoR<Arg1, Arg2, Arg3, Arg4> methodReference) {
  597.         return (arg1, arg2, arg3, arg4) -> {methodReference.apply(arg1, arg2, arg3, arg4);} ;
  598.     }
  599.    
  600.     /**
  601.      * Применить функцию. Дубль для {@link #apply(Object)}
  602.      * @return Возвращаемое значение функции
  603.      */
  604.     default Ret_Type process(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) {
  605.         return apply(arg1, arg2, arg3, arg4);
  606.     }
  607.    
  608.     /**
  609.      * Применить функцию
  610.      * @return Возвращаемое значение функции
  611.      */
  612.     public Ret_Type apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4);
  613.    
  614.    
  615.    
  616.    
  617.     /**
  618.      * Добавить 'pre-функцию' функцию
  619.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  620.      * @return Новую функцию, свянанную цепочкой
  621.      */
  622.     public default IFunction4<Arg1, Arg2, Arg3, Arg4, Ret_Type> andBefore(IFunction4<Arg1, Arg2, Arg3, Arg4, Ret_Type> nextFun)
  623.     {
  624.         return (arg1, arg2, arg3, arg4) -> {
  625.             nextFun.apply(arg1, arg2, arg3, arg4);
  626.             return apply(arg1, arg2, arg3, arg4);
  627.         };
  628.     }
  629.    
  630.     /**
  631.      * Добавить 'post-функцию' функцию
  632.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  633.      * @return Новую функцию, свянанную цепочкой
  634.      */
  635.     public default IFunction4<Arg1, Arg2, Arg3, Arg4, Ret_Type> andThan(IFunction4<Arg1, Arg2, Arg3, Arg4, Ret_Type> nextFun)
  636.     {
  637.         return (arg1, arg2, arg3, arg4) -> {
  638.             apply(arg1, arg2, arg3, arg4);
  639.             return nextFun.apply(arg1, arg2, arg3, arg4);
  640.         };
  641.     }
  642.    
  643.     /**
  644.      * Получить функцию без возвращаемого типа
  645.      * @return Новую фунцию
  646.      */
  647.     public default IFunction4NoR<Arg1, Arg2, Arg3, Arg4> asNoReturnFun()
  648.     {
  649.         return (arg1, arg2, arg3, arg4) -> apply(arg1, arg2, arg3, arg4);
  650.     }
  651. }
  652.  
  653. /**
  654.  * Версия функции IFunction4 без возвращаемого типа (NoR = No return)
  655.  * @author swayfarer
  656.  */
  657. @FunctionalInterface
  658. public static interface IFunction4NoR<Arg1, Arg2, Arg3, Arg4> extends IFunction4<Arg1, Arg2, Arg3, Arg4, Void> {
  659.    
  660.     /**
  661.      * Получить ничего не возвращающую функцию
  662.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  663.      * @return Новую функцию
  664.      */
  665.     static <Arg1, Arg2, Arg3, Arg4> IFunction4NoR<Arg1, Arg2, Arg3, Arg4> valueOf(IFunction4NoR<Arg1, Arg2, Arg3, Arg4> methodReference) {
  666.         return (arg1, arg2, arg3, arg4) -> {methodReference.apply(arg1, arg2, arg3, arg4);} ;
  667.     }
  668.    
  669.     public default Void apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
  670.     {
  671.         applyNoR(arg1, arg2, arg3, arg4);
  672.         return null;
  673.     }
  674.    
  675.     public void applyNoR(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4);
  676.    
  677.     /**
  678.      * Добавить 'pre-функцию' функцию
  679.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  680.      */
  681.     public default IFunction4NoR<Arg1, Arg2, Arg3, Arg4> andBefore(IFunction4NoR<Arg1, Arg2, Arg3, Arg4> nextFun)
  682.     {
  683.         return (arg1, arg2, arg3, arg4) -> {
  684.             nextFun.apply(arg1, arg2, arg3, arg4);
  685.             apply(arg1, arg2, arg3, arg4);
  686.         };
  687.     }
  688.    
  689.     /**
  690.      * Добавить 'post-функцию' функцию
  691.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  692.      */
  693.     public default IFunction4NoR<Arg1, Arg2, Arg3, Arg4> andThan(IFunction4NoR<Arg1, Arg2, Arg3, Arg4> nextFun)
  694.     {
  695.         return (arg1, arg2, arg3, arg4) -> {
  696.             apply(arg1, arg2, arg3, arg4);
  697.             nextFun.apply(arg1, arg2, arg3, arg4);
  698.         };
  699.     }
  700.    
  701. }
  702.  
  703.  
  704. @FunctionalInterface
  705. public static interface IFunction5<Arg1, Arg2, Arg3, Arg4, Arg5, Ret_Type> extends IFunctionStaticArgs {
  706.  
  707.     @Deprecated
  708.     @Override
  709.     default void process(IReference returnValue, Object... args)
  710.     {
  711.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3], (Arg3) args[5], (Arg4) args[7], (Arg5) args[9]));
  712.     }
  713.    
  714.     /**
  715.      * Получить ничего не возвращающую функцию
  716.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  717.      * @return Новую функцию
  718.      */
  719.     static <Arg1, Arg2, Arg3, Arg4, Arg5> IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> consumerOf(IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> methodReference) {
  720.         return (arg1, arg2, arg3, arg4, arg5) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5);} ;
  721.     }
  722.    
  723.     /**
  724.      * Применить функцию. Дубль для {@link #apply(Object)}
  725.      * @return Возвращаемое значение функции
  726.      */
  727.     default Ret_Type process(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5) {
  728.         return apply(arg1, arg2, arg3, arg4, arg5);
  729.     }
  730.    
  731.     /**
  732.      * Применить функцию
  733.      * @return Возвращаемое значение функции
  734.      */
  735.     public Ret_Type apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5);
  736.    
  737.    
  738.    
  739.    
  740.     /**
  741.      * Добавить 'pre-функцию' функцию
  742.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  743.      * @return Новую функцию, свянанную цепочкой
  744.      */
  745.     public default IFunction5<Arg1, Arg2, Arg3, Arg4, Arg5, Ret_Type> andBefore(IFunction5<Arg1, Arg2, Arg3, Arg4, Arg5, Ret_Type> nextFun)
  746.     {
  747.         return (arg1, arg2, arg3, arg4, arg5) -> {
  748.             nextFun.apply(arg1, arg2, arg3, arg4, arg5);
  749.             return apply(arg1, arg2, arg3, arg4, arg5);
  750.         };
  751.     }
  752.    
  753.     /**
  754.      * Добавить 'post-функцию' функцию
  755.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  756.      * @return Новую функцию, свянанную цепочкой
  757.      */
  758.     public default IFunction5<Arg1, Arg2, Arg3, Arg4, Arg5, Ret_Type> andThan(IFunction5<Arg1, Arg2, Arg3, Arg4, Arg5, Ret_Type> nextFun)
  759.     {
  760.         return (arg1, arg2, arg3, arg4, arg5) -> {
  761.             apply(arg1, arg2, arg3, arg4, arg5);
  762.             return nextFun.apply(arg1, arg2, arg3, arg4, arg5);
  763.         };
  764.     }
  765.    
  766.     /**
  767.      * Получить функцию без возвращаемого типа
  768.      * @return Новую фунцию
  769.      */
  770.     public default IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> asNoReturnFun()
  771.     {
  772.         return (arg1, arg2, arg3, arg4, arg5) -> apply(arg1, arg2, arg3, arg4, arg5);
  773.     }
  774. }
  775.  
  776. /**
  777.  * Версия функции IFunction5 без возвращаемого типа (NoR = No return)
  778.  * @author swayfarer
  779.  */
  780. @FunctionalInterface
  781. public static interface IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> extends IFunction5<Arg1, Arg2, Arg3, Arg4, Arg5, Void> {
  782.    
  783.     /**
  784.      * Получить ничего не возвращающую функцию
  785.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  786.      * @return Новую функцию
  787.      */
  788.     static <Arg1, Arg2, Arg3, Arg4, Arg5> IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> valueOf(IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> methodReference) {
  789.         return (arg1, arg2, arg3, arg4, arg5) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5);} ;
  790.     }
  791.    
  792.     public default Void apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
  793.     {
  794.         applyNoR(arg1, arg2, arg3, arg4, arg5);
  795.         return null;
  796.     }
  797.    
  798.     public void applyNoR(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5);
  799.    
  800.     /**
  801.      * Добавить 'pre-функцию' функцию
  802.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  803.      */
  804.     public default IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> andBefore(IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> nextFun)
  805.     {
  806.         return (arg1, arg2, arg3, arg4, arg5) -> {
  807.             nextFun.apply(arg1, arg2, arg3, arg4, arg5);
  808.             apply(arg1, arg2, arg3, arg4, arg5);
  809.         };
  810.     }
  811.    
  812.     /**
  813.      * Добавить 'post-функцию' функцию
  814.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  815.      */
  816.     public default IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> andThan(IFunction5NoR<Arg1, Arg2, Arg3, Arg4, Arg5> nextFun)
  817.     {
  818.         return (arg1, arg2, arg3, arg4, arg5) -> {
  819.             apply(arg1, arg2, arg3, arg4, arg5);
  820.             nextFun.apply(arg1, arg2, arg3, arg4, arg5);
  821.         };
  822.     }
  823.    
  824. }
  825.  
  826.  
  827. @FunctionalInterface
  828. public static interface IFunction6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Ret_Type> extends IFunctionStaticArgs {
  829.  
  830.     @Deprecated
  831.     @Override
  832.     default void process(IReference returnValue, Object... args)
  833.     {
  834.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3], (Arg3) args[5], (Arg4) args[7], (Arg5) args[9], (Arg6) args[11]));
  835.     }
  836.    
  837.     /**
  838.      * Получить ничего не возвращающую функцию
  839.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  840.      * @return Новую функцию
  841.      */
  842.     static <Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> consumerOf(IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> methodReference) {
  843.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5, arg6);} ;
  844.     }
  845.    
  846.     /**
  847.      * Применить функцию. Дубль для {@link #apply(Object)}
  848.      * @return Возвращаемое значение функции
  849.      */
  850.     default Ret_Type process(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6) {
  851.         return apply(arg1, arg2, arg3, arg4, arg5, arg6);
  852.     }
  853.    
  854.     /**
  855.      * Применить функцию
  856.      * @return Возвращаемое значение функции
  857.      */
  858.     public Ret_Type apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6);
  859.    
  860.    
  861.    
  862.    
  863.     /**
  864.      * Добавить 'pre-функцию' функцию
  865.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  866.      * @return Новую функцию, свянанную цепочкой
  867.      */
  868.     public default IFunction6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Ret_Type> andBefore(IFunction6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Ret_Type> nextFun)
  869.     {
  870.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> {
  871.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6);
  872.             return apply(arg1, arg2, arg3, arg4, arg5, arg6);
  873.         };
  874.     }
  875.    
  876.     /**
  877.      * Добавить 'post-функцию' функцию
  878.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  879.      * @return Новую функцию, свянанную цепочкой
  880.      */
  881.     public default IFunction6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Ret_Type> andThan(IFunction6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Ret_Type> nextFun)
  882.     {
  883.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> {
  884.             apply(arg1, arg2, arg3, arg4, arg5, arg6);
  885.             return nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6);
  886.         };
  887.     }
  888.    
  889.     /**
  890.      * Получить функцию без возвращаемого типа
  891.      * @return Новую фунцию
  892.      */
  893.     public default IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> asNoReturnFun()
  894.     {
  895.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> apply(arg1, arg2, arg3, arg4, arg5, arg6);
  896.     }
  897. }
  898.  
  899. /**
  900.  * Версия функции IFunction6 без возвращаемого типа (NoR = No return)
  901.  * @author swayfarer
  902.  */
  903. @FunctionalInterface
  904. public static interface IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> extends IFunction6<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Void> {
  905.    
  906.     /**
  907.      * Получить ничего не возвращающую функцию
  908.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  909.      * @return Новую функцию
  910.      */
  911.     static <Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> valueOf(IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> methodReference) {
  912.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5, arg6);} ;
  913.     }
  914.    
  915.     public default Void apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6)
  916.     {
  917.         applyNoR(arg1, arg2, arg3, arg4, arg5, arg6);
  918.         return null;
  919.     }
  920.    
  921.     public void applyNoR(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6);
  922.    
  923.     /**
  924.      * Добавить 'pre-функцию' функцию
  925.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  926.      */
  927.     public default IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> andBefore(IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> nextFun)
  928.     {
  929.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> {
  930.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6);
  931.             apply(arg1, arg2, arg3, arg4, arg5, arg6);
  932.         };
  933.     }
  934.    
  935.     /**
  936.      * Добавить 'post-функцию' функцию
  937.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  938.      */
  939.     public default IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> andThan(IFunction6NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> nextFun)
  940.     {
  941.         return (arg1, arg2, arg3, arg4, arg5, arg6) -> {
  942.             apply(arg1, arg2, arg3, arg4, arg5, arg6);
  943.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6);
  944.         };
  945.     }
  946.    
  947. }
  948.  
  949.  
  950. @FunctionalInterface
  951. public static interface IFunction7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Ret_Type> extends IFunctionStaticArgs {
  952.  
  953.     @Deprecated
  954.     @Override
  955.     default void process(IReference returnValue, Object... args)
  956.     {
  957.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3], (Arg3) args[5], (Arg4) args[7], (Arg5) args[9], (Arg6) args[11], (Arg7) args[13]));
  958.     }
  959.    
  960.     /**
  961.      * Получить ничего не возвращающую функцию
  962.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  963.      * @return Новую функцию
  964.      */
  965.     static <Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> consumerOf(IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> methodReference) {
  966.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);} ;
  967.     }
  968.    
  969.     /**
  970.      * Применить функцию. Дубль для {@link #apply(Object)}
  971.      * @return Возвращаемое значение функции
  972.      */
  973.     default Ret_Type process(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7) {
  974.         return apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  975.     }
  976.    
  977.     /**
  978.      * Применить функцию
  979.      * @return Возвращаемое значение функции
  980.      */
  981.     public Ret_Type apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7);
  982.    
  983.    
  984.    
  985.    
  986.     /**
  987.      * Добавить 'pre-функцию' функцию
  988.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  989.      * @return Новую функцию, свянанную цепочкой
  990.      */
  991.     public default IFunction7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Ret_Type> andBefore(IFunction7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Ret_Type> nextFun)
  992.     {
  993.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> {
  994.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  995.             return apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  996.         };
  997.     }
  998.    
  999.     /**
  1000.      * Добавить 'post-функцию' функцию
  1001.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  1002.      * @return Новую функцию, свянанную цепочкой
  1003.      */
  1004.     public default IFunction7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Ret_Type> andThan(IFunction7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Ret_Type> nextFun)
  1005.     {
  1006.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> {
  1007.             apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1008.             return nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1009.         };
  1010.     }
  1011.    
  1012.     /**
  1013.      * Получить функцию без возвращаемого типа
  1014.      * @return Новую фунцию
  1015.      */
  1016.     public default IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> asNoReturnFun()
  1017.     {
  1018.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1019.     }
  1020. }
  1021.  
  1022. /**
  1023.  * Версия функции IFunction7 без возвращаемого типа (NoR = No return)
  1024.  * @author swayfarer
  1025.  */
  1026. @FunctionalInterface
  1027. public static interface IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> extends IFunction7<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Void> {
  1028.    
  1029.     /**
  1030.      * Получить ничего не возвращающую функцию
  1031.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  1032.      * @return Новую функцию
  1033.      */
  1034.     static <Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> valueOf(IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> methodReference) {
  1035.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);} ;
  1036.     }
  1037.    
  1038.     public default Void apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7)
  1039.     {
  1040.         applyNoR(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1041.         return null;
  1042.     }
  1043.    
  1044.     public void applyNoR(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7);
  1045.    
  1046.     /**
  1047.      * Добавить 'pre-функцию' функцию
  1048.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  1049.      */
  1050.     public default IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> andBefore(IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> nextFun)
  1051.     {
  1052.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> {
  1053.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1054.             apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1055.         };
  1056.     }
  1057.    
  1058.     /**
  1059.      * Добавить 'post-функцию' функцию
  1060.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  1061.      */
  1062.     public default IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> andThan(IFunction7NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> nextFun)
  1063.     {
  1064.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7) -> {
  1065.             apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1066.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
  1067.         };
  1068.     }
  1069.    
  1070. }
  1071.  
  1072.  
  1073. @FunctionalInterface
  1074. public static interface IFunction8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Ret_Type> extends IFunctionStaticArgs {
  1075.  
  1076.     @Deprecated
  1077.     @Override
  1078.     default void process(IReference returnValue, Object... args)
  1079.     {
  1080.         returnValue.setValue(apply((Arg1) args[1], (Arg2) args[3], (Arg3) args[5], (Arg4) args[7], (Arg5) args[9], (Arg6) args[11], (Arg7) args[13], (Arg8) args[15]));
  1081.     }
  1082.    
  1083.     /**
  1084.      * Получить ничего не возвращающую функцию
  1085.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  1086.      * @return Новую функцию
  1087.      */
  1088.     static <Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> consumerOf(IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> methodReference) {
  1089.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);} ;
  1090.     }
  1091.    
  1092.     /**
  1093.      * Применить функцию. Дубль для {@link #apply(Object)}
  1094.      * @return Возвращаемое значение функции
  1095.      */
  1096.     default Ret_Type process(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8) {
  1097.         return apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1098.     }
  1099.    
  1100.     /**
  1101.      * Применить функцию
  1102.      * @return Возвращаемое значение функции
  1103.      */
  1104.     public Ret_Type apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8);
  1105.    
  1106.    
  1107.    
  1108.    
  1109.     /**
  1110.      * Добавить 'pre-функцию' функцию
  1111.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  1112.      * @return Новую функцию, свянанную цепочкой
  1113.      */
  1114.     public default IFunction8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Ret_Type> andBefore(IFunction8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Ret_Type> nextFun)
  1115.     {
  1116.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> {
  1117.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1118.             return apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1119.         };
  1120.     }
  1121.    
  1122.     /**
  1123.      * Добавить 'post-функцию' функцию
  1124.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  1125.      * @return Новую функцию, свянанную цепочкой
  1126.      */
  1127.     public default IFunction8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Ret_Type> andThan(IFunction8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Ret_Type> nextFun)
  1128.     {
  1129.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> {
  1130.             apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1131.             return nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1132.         };
  1133.     }
  1134.    
  1135.     /**
  1136.      * Получить функцию без возвращаемого типа
  1137.      * @return Новую фунцию
  1138.      */
  1139.     public default IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> asNoReturnFun()
  1140.     {
  1141.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1142.     }
  1143. }
  1144.  
  1145. /**
  1146.  * Версия функции IFunction8 без возвращаемого типа (NoR = No return)
  1147.  * @author swayfarer
  1148.  */
  1149. @FunctionalInterface
  1150. public static interface IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> extends IFunction8<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Void> {
  1151.    
  1152.     /**
  1153.      * Получить ничего не возвращающую функцию
  1154.      * @param methodReference Метод, с которого будет снята функция. Пример: System.out::printLn
  1155.      * @return Новую функцию
  1156.      */
  1157.     static <Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> valueOf(IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> methodReference) {
  1158.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> {methodReference.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);} ;
  1159.     }
  1160.    
  1161.     public default Void apply(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8)
  1162.     {
  1163.         applyNoR(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1164.         return null;
  1165.     }
  1166.    
  1167.     public void applyNoR(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8);
  1168.    
  1169.     /**
  1170.      * Добавить 'pre-функцию' функцию
  1171.      * @param nextFun Функция, которая будет выполнена до этой. Цепочка вернет результат последней функции
  1172.      */
  1173.     public default IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> andBefore(IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> nextFun)
  1174.     {
  1175.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> {
  1176.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1177.             apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1178.         };
  1179.     }
  1180.    
  1181.     /**
  1182.      * Добавить 'post-функцию' функцию
  1183.      * @param nextFun Функция, которая будет выполнена после этой. Цепочка вернет результат последней функции
  1184.      */
  1185.     public default IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> andThan(IFunction8NoR<Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> nextFun)
  1186.     {
  1187.         return (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -> {
  1188.             apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1189.             nextFun.apply(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
  1190.         };
  1191.     }
  1192.    
  1193. }
  1194.  
  1195.  
  1196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement