import java.util.Comparator;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.Function;

/**
 * {@link <a href=
 * "https://[Log in to view URL]"
 * target= "_blank"></a>}
 * 
 * @author itammb ( Italia Massimiliano Buscati )
 * @version JDK 1.15
 *
 */
class Main {
	private static class UniTest {

		/**
		 * @see BiFunction#apply(Object, Object)
		 * @see BiFunction#andThen(Function)
		 */
		public void biFunction_filter(int a, int b) {
			// logica - sintesi
			BiFunction<Integer, Integer, Integer> sum = (x1, x2) -> x1 + x2;

			// logica - filtro - soluzione parziale
			Function<Integer, Integer> filter = (Integer i) -> {
				return i * 2;
			};

			System.out.println(sum.andThen(filter).apply(a, b));
		}

		/**
		 * @see BinaryOperator#apply(Object, Object)
		 * @see BiFunction#andThen(Function)
		 */
		public void binaryOperator_apply(int a, int b) {
			// logica - sintesi
			BinaryOperator<Integer> func3 = (x1, x2) -> x1 + x2;

			System.out.println(func3.apply(a, b));
		}

		/**
		 * @see BinaryOperator#maxBy(Comparator)
		 * {link Comparator}
		 */
		public void binaryOperator_maxBy(int x, int y) {

			// Comparator
			Comparator<Integer> cmp = Integer::compare;

			// Returns:
			//  0 se x == y
			// -1 se x < y
			// +1 se x > y
			System.out.println(cmp.compare(x, y));

			BinaryOperator<Integer> maxBinaryOperator = BinaryOperator.maxBy(cmp);

			System.out.println(maxBinaryOperator.apply(x, y));
		}

		public void binaryOperator_maxBy_labda(int x, int y) {
			Comparator<Integer> cmp = (Integer o1, Integer o2) -> o1.compareTo(o2);
			BinaryOperator<Integer> maxBinaryOperator = BinaryOperator.maxBy(cmp);

			System.out.println(maxBinaryOperator.apply(x, y));
		}
	}

	public static void main(String args[]) {
		// Unit test - sintesi di una logica con risultato dello stesso tipo
		new UniTest().binaryOperator_apply(2, 3);

		// Unit test - la soluzione parziale viene elaborata seguendo il codice
		// specifico da destra verso sinistra
		new UniTest().biFunction_filter(2, 3);

		// Unit test - la sintesi di una logica viene comparata 
		new UniTest().binaryOperator_maxBy(2, 3);

		// Unit test - la sintesi di una logica viene comparata (uso di labda expression)
		new UniTest().binaryOperator_maxBy_labda(2, 3);
	}
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: