Before going through the below examples, first, note that Lambda expressions can be written for any SAM (also called Functional) interfaces (Infact, Lambda expression is a syntactic sugar for replacing the verbose anonymous class (with single method) in Java).
Single Abstract Method interface or Functional Interface is an interface which contains only one abstract method), you can look here. If you know this simple point, you can write (play with) any number of your own Functional interfaces and then write the different Lambda Expressions according to each of those the Functional interface methods.
Below examples have been written by making use of the existing JDK (1.8) Functional interfaces like Callable, Function, BiFunction (Like these, there are many in built Functional interfaces in JDK 1.8, most of the times they readily suit our requirements).
(1) Example for (int x, int y) -> { return x + y; }
//Below Lamda exp, takes 2 Input int Arguments and returns string
BiFunction<Integer, Integer, String> biFunction = (num1, num2) ->
"Sum Is:" +(num1 + num2);
System.out.println(biFunction.apply(100, 200));
(2) Example for x -> x * x
//Below Lamda exp, takes string Input Argument and returns string
list.stream().map((String str1) ->
str1.substring(0, 1)).
forEach(System.out::println);
(3) Example for () -> x
//Below Lambda exp, Input argument is void, returns String
Callable<String> callabl = () -> "My Callable";
ExecutorService service = Executors.newSingleThreadExecutor();
Future<String> future = service.submit(callable);
System.out.println(future.get());
(x,y,z) -> x+y+z. But they're all the same "kind" of thing.