我在玩耍,试图学习过滤器。我自己进行一些调查,并尝试通过一个列表,另一个列表,数组列表进行筛选以获取某些数据。我想查看对象是否包含user
。
我知道userProjectRoles是一个ArrayList,然后得到Project Object,然后是成员(Project.Members)。但是,如何遍历所有arrayList,然后转到Roles.Name以查看那里的数据呢?
这里是我的东西,被卡住了一段时间。
任何帮助都是有益的。非常感谢!
UserProjectRole userProjectRole = userProjectRoles.stream().filter(test ->
test.getProject().getMembers()).
让我先尝试使用for循环方法,以便您可以轻松地使用流重写逻辑:
首先,您拥有所有的[[POJO
public class Project {
List<User> members;
public List<User> getMembers() {
return members;
}
public void setMembers(List<User> members) {
this.members = members;
}
}
public class User {
List<Project> projects;
Set<Role> roles;
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projects) {
this.projects = projects;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
public class Role {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class TestDrive {
public static void main(String[] args) {
//all current projects in my company
Project backend = new Project();
Project frontend = new Project();
Project testing = new Project();
//all members
User scrumMaster = new User();
User seniorEngineer = new User();
User backendEngineer = new User();
User frontEngineer = new User();
User qaEngineer = new User();
// various available roles
Role admin = new Role();
admin.setName("admin");
Role lead = new Role();
lead.setName("lead");
Role mainEngineer = new Role();
mainEngineer.setName("engineer-a");
Role backupEngineer = new Role();
backupEngineer.setName("engineer-b");
// designation of above roles to current employees
scrumMaster.setRoles(ImmutableSet.of(admin));
seniorEngineer.setRoles(ImmutableSet.of(lead));
backendEngineer.setRoles(ImmutableSet.of(mainEngineer, backupEngineer));
frontEngineer.setRoles(ImmutableSet.of(mainEngineer, backupEngineer));
qaEngineer.setRoles(ImmutableSet.of(mainEngineer));
//assigning members to projects
backend.setMembers(ImmutableList.of(scrumMaster, seniorEngineer, backendEngineer));
frontend.setMembers(ImmutableList.of(scrumMaster, seniorEngineer, frontEngineer, qaEngineer));
testing.setMembers(ImmutableList.of(scrumMaster, qaEngineer));
//from perspective of one member
backendEngineer.setProjects(ImmutableList.of(backend));
List<String> backendEngineerPeers = new ArrayList<>();
for(Project project : backendEngineer.getProjects()){
if (project.getMembers().size() > 0){
for (User member: project.getMembers()){
if(member.getRoles().size() > 0){
for(Role aRole: member.getRoles()){
backendEngineerPeers.add(aRole.getName());
}
}
}
}
}
System.out.println(backendEngineerPeers);
}
}
有信息流
List<String> backendEngineerPeersWithStream = backendEngineer.getProjects().stream() .flatMap(project -> project.getMembers().stream()) .flatMap(member -> member.getRoles().stream()) .map(role -> role.getName()) .collect(Collectors.toList()); System.out.println(backendEngineerPeersWithStream);
类图: