。 我希望将此代码转换为lambda,这是可能的吗?
List<Person> SortedList = people.OrderBy(o=>o.Age).ToList();
答案 0 :(得分:7)
这不是直接可能的,没有。
Lambdas不具备状态(在他们从周围环境捕获的任何状态之外)。即使它们可以,访问它也有点尴尬,因为artisan migrate:rollback
引用了周围的上下文(即,定义了lambda的方法的对象), not < / em> lamdba的实例。这是JLS 15.27.2中指定的。
你可以做一些事情,比如在lambda之前声明this
,然后用它来管理AtomicReference<String>
状态;但这可能是对lambdas的滥用,而不是对它们的习惯用法。 Lambdas真的被设计成非常无状态,除非他们捕获周围环境的状态(这就是为什么15.27.2)指定lastLine
引用该上下文而不是lambda)。
答案 1 :(得分:1)
您不能拥有封装的字段,但可以引用1
的数组String[] lastLine = { null };
crashFile.forEach(line -> {
if((title == null || title.equals("")) && line.contains("at")) {
title = lastLine[0];
}
lastLine[0] = line;
});
System.out.println("The last line was " + lastLine[0]);