将double foreach和if语句重构为java 8解决方案
就像你可以注意到的那样,我试图让用户参与一个特定的项目(而且我的代码可以正常工作) 但如果我需要在循环中循环,该怎么办?您可以这样做:将double foreach和if语句重构为java 8解决方案,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,就像你可以注意到的那样,我试图让用户参与一个特定的项目(而且我的代码可以正常工作) 但如果我需要在循环中循环,该怎么办?您可以这样做: List<User> usersInSpecificProject = allUsers.stream() .filter(u -> u.getProjects().stream() .map(Project::getId)
List<User> usersInSpecificProject =
allUsers.stream()
.filter(u -> u.getProjects().stream()
.map(Project::getId)
.anyMatch(pid -> pid.equals(projectId)))
.collect(Collectors.toList());
您可以这样做:
List<User> usersInSpecificProject =
allUsers.stream()
.filter(u -> u.getProjects().stream()
.map(Project::getId)
.anyMatch(pid -> pid.equals(projectId)))
.collect(Collectors.toList());
你可以这样做
List<User> users = allUsers.stream()
.filter(u -> u.getProjects().stream().anyMatch(p -> p.getId().equals(projectId)))
.collect(Collectors.toList());
但是,您可能必须根据您的用户数据将其更改为类。您可以这样做
List<User> users = allUsers.stream()
.filter(u -> u.getProjects().stream().anyMatch(p -> p.getId().equals(projectId)))
.collect(Collectors.toList());
但是,您可能必须根据您的UserDto
类来更改它。您可以使用Java 8的stream()
函数来实现它:
usersInSpecificProject.addAll(allUsers.stream()
.filter(u -> u.getProjects().stream().map(Project::getId)
.anyMatch(projId-> projId.equals(projectId)))
.collect(Collectors.toList()));
以下是有关流()
工作原理的链接。您可以使用Java 8的流()
函数来实现它:
usersInSpecificProject.addAll(allUsers.stream()
.filter(u -> u.getProjects().stream().map(Project::getId)
.anyMatch(projId-> projId.equals(projectId)))
.collect(Collectors.toList()));
这里是关于stream()
如何工作的链接。您可以在名为hasProject(projectd-projectd)的用户中添加一个方法,这可能是您的条件。为什么要2个for循环?我想从特定项目中获取所有用户。这就是为什么我需要遍历所有用户。检查他们的项目。然后检查他们的项目是否有具有特定id的id。是否有更简单的方法来实现这一点?您似乎正在使用数据库-编写临时查询将更高效、更简单。您在User中有一组项目。您可以使用其中的for循环来检查用户是否在用户hasProject中拥有可以在过滤器中调用的project->create方法。但iso使用for循环也可以将集合更改为HashMap。然后在您的方法中可以返回map.contains(projectId)。如果您试图对此进行优化,您不应该首先使用userRepository.findAll()
。使用实际的数据库操作,如findByProject
或其他操作。您可以在用户中添加一个名为hasProject(projectd projectd)的方法,这可能是您的条件。为什么要2个for循环?我想从特定项目中获取所有用户。这就是为什么我需要遍历所有用户。检查他们的项目。然后检查他们的项目是否有具有特定id的id。有没有更简单的方法来实现这一点?您似乎正在使用数据库-编写临时查询将更高效、更简单。您在User中有一组项目。您可以使用其中的for循环来检查用户是否在用户hasProject中拥有可以在过滤器中调用的project->create方法。但iso使用for循环也可以将集合更改为HashMap。然后在您的方法中可以返回map.contains(projectId)。如果您试图对此进行优化,您不应该首先使用userRepository.findAll()
。使用实际的数据库操作,如findByProject
或其他什么。这不起作用:在flatMap
之后,这是一个流
,而不是流
。这不起作用:在flatMap
之后,这是一个流
。或任何匹配(projectd::equals)
或任何匹配(projectd::equals)
usersInSpecificProject.addAll(allUsers.stream()
.filter(u -> u.getProjects().stream().map(Project::getId)
.anyMatch(projId-> projId.equals(projectId)))
.collect(Collectors.toList()));