import java.util.Collection; import java.util.LinkedList; import java.util.Optional; import java.util.function.BiFunction; class Main { public static void main(String[] args) { Collection result = new LinkedList<>(); Optional _1 = Optional.of(new A()); Optional _2 = Optional.of(new B()); BiFunction le = (a, b) -> a <= b; addIfTrue(result, compareIfPresent(_1.map(A::getValue), _2.map(B::getValue), le), 3); System.out.println(result); } private static boolean compareIfPresent(Optional arg1, Optional arg2, BiFunction comparator) { if (!arg1.isPresent()) return true; if (!arg2.isPresent()) return true; return comparator.apply(arg1.get(), arg2.get()); } public static void addIfTrue(Collection list, boolean canAdd, T t) { if (canAdd) { addIfNotNull(list, t); } } public static void addIfNotNull(Collection list, T t) { if (t != null) { list.add(t); } } static class A { public Integer getValue() { return 1; } } static class B { public Integer getValue() { return 2; } } }