> Lambdas were adopted in Java 8
> Defined as an expression of an instance of a single-method anonymous class
> Anonymous methods were introduced in C# 2.0
> Lambda expression in C# 3.0
> Defined as a function that can be passed as an argument or returned as the value of function calls
(Java 8)
(C# 6)
param -> Do.somethingWith(param)
p -> {
return Something.For(p);
}
param => Do.somethingWith(param)
(param) => {
Do.OneThingWith(param);
Do.AnotherThing();
}
() => Do.something()
(input parameters) => Expression;
(p1, p2) -> {
Do.SomethingWith(p1);
return Something.For(p2);
}
listOfStuff.Select(x => doFilter(x));
Apply method group transformation :
listOfStuff.Select(doFilter);
listOfStuff.stream().map(x => doMap(x));
Apply method reference transformation :
listOfStuff.stream().map(this::doMap);
public void RunParamAction(Integer input1,
String input2,
BiConsumer<Integer, String> callback) {
Do.something();
callback.accept(input1, input2);
}
private void CallLambdaAction() {
RunParamAction(1, "Hello", (param1, param2) -> System.out.println(param1 + param2));
}
public void RunParamAction(KeyValuePair<int, string> inputs, Action<int, string> callback)
{
Do.Something();
callback(inputs.Key, inputs.Value);
}
private void CallLambdaAction()
{
RunParamAction(new KeyValuePair<int, string>(1, "Hello"), (param1, param2) =>
Console.WriteLine(param2 + param1));
}
Java
C#
public String FromParamFunction(Integer input,
Function<Integer, String> callback) {
Do.SomethingElse();
return callback.apply(input);
}
private void CallLambdaFunction() {
String result = FromParamFunction(1, param -> param > 1 ? "HI!" : "Bye!");
}
public string FromParamFunction(int input, Func<int, string> callback)
{
Do.SomethingElse();
return callback(input);
}
private void CallLambdaFunction()
{
var result = FromParamFunction(1, (param) => param > 1 ? "HI!" : "Bye!");
}
Java
C#