首页 > 解决方案 > 如何从地图内带有if条件的流中获取计数?

问题描述

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()Stream API 的方法?

澄清:我想过滤掉满足 If 块中提到的当前条件的员工,而我只需要调用一次。我之前在做什么,我会展示的。

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 方法。

标签: javajava-8java-stream

解决方案


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

推荐阅读