I know that lambdas are instances of interfaces that have only 1 abstract method. But doesn't that mean, every time there is a lambda expression, it also mean there is actually a new
keyword there?
Runnable r1 = new Runnable()
{
@Override
public void run()
{
System.out.println("Hello World!");
}
};
// equals to
Runnable r2 = () -> System.out.println("Hello World!");
// lambda equals to a new keyword
I want to know if it is a better practice to store a lambda to a variable in order to prevent unnessary creation of an object and garbage collection.
For example, if I have a method that will turn a List<Object>
to a List<String>
:
import java.util.List;
import java.util.stream.Collectors;
public class Helper
{
public static List<String> objectListToStringList(List<Object> objects)
{
return objects.stream()
.map(o -> o.toString())
.collect(Collectors.toList());
}
}
Is it better to store the o -> o.toString()
lambda to a variable in order to avoid the creation of a Function
object when everytime this method was called?
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Helper
{
private static final Function<Object, String> mapToString = o -> o.toString();
public static List<String> objectListToStringList(List<Object> objects)
{
return objects.stream()
.map(mapToString)
.collect(Collectors.toList());
}
}