Optional<Integer> () { final Optional<String> s = returnsR( "foo", z -> { if (z.isEmpty()) { return Optional.empty(); } else { return Optional.of("a string"); } }); if (s.isPresent()) { return Optional.of(1); } else { return Optional.of(2); } }