Java实现List中的数据分类(使用JDK1.8的List的stream()方法进行优化)
背景JDK1.8实现List中的数据分类。在JDK1.8之前是没有提供这样的API的,实现过程如下:JDK1.8之前实现List中的数据分类过程场景:需要把考生按照考生所属机构进行分类处理。已知考生在一个List容器中,并且考生有所属机构。Candidate类public class Candidate {private String orgId;//我的目的是以这...
·
背景
- JDK1.8实现List中的数据分类。
- 在JDK1.8之前是没有提供这样的API的,实现过程如下:JDK1.8之前实现List中的数据分类或者使用guava实现List分类数据
过程
- 场景:需要把考生按照考生所属机构进行分类处理。已知考生在一个List容器中,并且考生有所属机构。
- Candidate类
public class Candidate {
private String orgId;//我的目的是以这个orgId分类
private String orgName;
private String candidateId;
public Candidate(){
}
public Candidate(String orgId, String candidateId, String orgName) {
super();
this.candidateId = candidateId;
this.orgId = orgId;
this.orgName = orgName;
}
public String getCandidateId() {
return candidateId;
}
public void setCandidateId(String candidateId) {
this.candidateId = candidateId;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
}
- CandidateOrg类
public class CandidateOrg {
private String orgId;
private String orgName;
public CandidateOrg() {
}
public CandidateOrg(String orgId, String orgName) {
super();
this.orgId = orgId;
this.orgName = orgName;
}
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
}
- 测试类
public class ClassificationTest {
public static void main(String[] args) {
List<Candidate> list = new ArrayList<Candidate>();
list.add(new Candidate("1","1","机构一"));//机构id,考生id,机构名称。
list.add(new Candidate("1","2","机构一"));
list.add(new Candidate("2","3","机构二"));
list.add(new Candidate("2","4","机构二"));
list.add(new Candidate("3","5","机构三"));
list.add(new Candidate("3","6","机构三"));
list.add(new Candidate("4","7","机构四"));
list.add(new Candidate("4","8","机构四"));
Map<String, List<Candidate>> map = list.stream().collect(Collectors.groupingBy(
Candidate::getOrgId));
}
}
- 结果(内存快照)
小结
- 在JDK1.8之前确实没有找到一个好的实现方式。
更多推荐
所有评论(0)