之前在学习Java8的新特性时,十分喜欢Lambda的简洁性,而真正地用以解决项目中的技术点时,更为之惊叹不已。现在有这样的需求:从由Project这个类组成的List中取出id和name组成对应的键值对。
有下面这样的实体类,简洁起见,将多余的字段和注解以及类的继承关系去除。
import java.util.Date;
/**
* Created by Mollychin on 2018/3/3.
*/
public class Project{
private int id;
private String name;
private Date createTime;
//省略响应的getter和setter方法。
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
现有List<Project> allProjects = projectService.getAll();
要取得该list中项目状态为“Status.ENABLE”的项目的所有的id和name的键值对,若不采用lambda表达式,需要对该list进行循环、if判断等复杂操作。但一旦使用了Lambda表达式,嘿嘿,过程就显得相当简洁了。代码如下:
Map<Long, String> nameMap = null;
nameMap = allProjects.stream().filter(project -> Status.ENABLE.equals(project.getStatus()))
.collect(Collectors
.toMap(Project::getId, Project::getName, (value1, value2) -> value2));