java—如何从Map中带有if条件的流中获取计数?

zu0ti5jz  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(346)
List<Employee> Employees = getEmployeeList();
AtomicInteger count = new AtomicInteger();

Employees.stream()
        .map(item -> {
            UserProfile user = userDao.findById(item.getUserProfileId());
            if(("domainName").equals(user.getDomain()) && ("agencyCode").equals(user.getAgencyNumber())){
                count.getAndIncrement();
            }
            return item;
        }).collect(Collectors.toList());

我需要满足要求的雇员人数 if 条件。如何移除 count 变量,而使用 count() 流api的方法?
澄清:我想筛选出符合if block中提到的当前条件的员工,而我只需要打一次电话。我之前所做的,我会展示出来。

List<Employee> Employees = getEmployeeList();
                Employee employee = Employees.stream()
                .filter(item -> ("domainName").equals(userDao.findById(item.getUserProfileId()).getDomain()))
                .filter(item -> ("agencyCode").equals(userDao.findById(item.getUserProfileId()).getAgencyNumber()))
                .findAny().orElse(null);

所以我只需要调用userdao方法一次。

jchrr9hc

jchrr9hc1#

如果仍然需要原始对象,可以使用布尔键创建贴图。像这样:

List<Employee> Employees = getEmployeeList();
    Map<Boolean, List<Employee>> result = Employees.stream()
        .collect(Collectors.partitioningBy(employee -> {
            var user = userDao.findById(item.getUserProfileId()));
            return ("domainName").equals(user.getDomain()) && ("agencyCode").equals(user.getAgencyNumber());
        }
        ));

然后你可以在你想要的名单上给count打电话。

result.get(false).count();
oknwwptz

oknwwptz2#

long count = getEmployeeList().stream()
                              .map(Employee::getUserProfileId)
                              .map(userDao::findById)
                              .filter(user -> "domainName".equals(user.getDomain())
                                      && "agencyCode".equals(user.getAgencyNumber()))
                              .count();

相关问题