将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()));