java流按属性通过列表进行排序/筛选
我有一些逻辑,可以根据非活动用户创建通知。我正在获取具有以下属性的用户列表。我试图做的只是在一个部门有一个非活动用户时触发我的创建通知方法。因此,根据下面的列表,基本上会创建一个通知,说明dept 1中有一个非活动用户,dept 2有另一个通知。希望这有意义java流按属性通过列表进行排序/筛选,java,sorting,collections,lambda,Java,Sorting,Collections,Lambda,我有一些逻辑,可以根据非活动用户创建通知。我正在获取具有以下属性的用户列表。我试图做的只是在一个部门有一个非活动用户时触发我的创建通知方法。因此,根据下面的列表,基本上会创建一个通知,说明dept 1中有一个非活动用户,dept 2有另一个通知。希望这有意义 users: {name: John, active: f, deptId: 1} {name: Jane, active: f, deptId: 1} {name: Mike, active: t, deptId: 1} {name: J
users:
{name: John, active: f, deptId: 1}
{name: Jane, active: f, deptId: 1}
{name: Mike, active: t, deptId: 1}
{name: Joe, active: f, deptId: 2}
{name: Jim, active: t, deptId: 2}
我当前的代码基本上会得到这个列表,然后检查每个列表上的活动标志,并为每个用户创建一个通知——但我需要重构它
List<User> users = userRepository.findAll();
for(User u : users){
if(u != null && u.getActive == false){
....create Notification method
List users=userRepository.findAll();
for(用户u:用户){
如果(u!=null&&u.getActive==false){
..创建通知方法
按部门对这些组进行分组,然后只检查每个组是否有false的活动标志,并为每个非活动用户创建一个通知,而不是一个通知,最好的方法是什么?也许您会发现以下代码片段很有帮助:
public Map<String, List<User>> getInactiveUsersByDepartment(List<User> allUsers) {
return allUsers.stream().filter(user -> user != null).filter(user -> !user.getActive()).collect(Collectors.groupingBy(User::getDepartment));
}
public Map getInactiveUsersByDepartment(列出用户){
返回allUsers.stream().filter(用户->用户!=null).filter(用户->!用户.getActive()).collect(收集器.groupingBy(用户::getDepartment));
}
也许您会发现以下代码片段很有帮助:
public Map<String, List<User>> getInactiveUsersByDepartment(List<User> allUsers) {
return allUsers.stream().filter(user -> user != null).filter(user -> !user.getActive()).collect(Collectors.groupingBy(User::getDepartment));
}
public Map getInactiveUsersByDepartment(列出用户){
返回allUsers.stream().filter(用户->用户!=null).filter(用户->!用户.getActive()).collect(收集器.groupingBy(用户::getDepartment));
}
首先过滤掉null
和活动用户,因为您只对那些不活动的用户感兴趣。然后,根据部门ID对结果进行分组。使用生成的映射来迭代密钥集,即具有不活动用户的部门:
users.stream().filter(Objects::nonNull)
.filter(((Predicate<User>) User::isActive).negate())
.collect(Collectors.groupingBy(User::getDeptId))
.keySet().forEach(Notifier::notifyDepartment);
首先筛选出
null
和活动用户,因为您只对那些不活动的用户感兴趣。然后,根据部门ID对结果进行分组。使用生成的映射来迭代密钥集,即具有不活动用户的部门:
users.stream().filter(Objects::nonNull)
.filter(((Predicate<User>) User::isActive).negate())
.collect(Collectors.groupingBy(User::getDeptId))
.keySet().forEach(Notifier::notifyDepartment);
实际上,我输入了一个错误并遗漏了一些内容。该列表实际上不是来自用户域-它位于另一个名为UserUnprocessed的表中,该表具有用户表的userId外键,因此要检查这些属性,它需要是UserUnprocessed.getUser().getDepartment-我还能使用你写的方法吗?事实上,我输入了一个错误并遗漏了一些内容。该列表实际上不是来自用户域-它位于另一个名为UserUnprocessed的表中,该表具有用户表的userId外键,因此要检查这些属性,它需要是UserUnprocessed.getUser().getDepartment-我还能使用你写的方法吗?