我创建了一个类
class Employee { Integer id; String name; String departments; }
在sql server数据库中,我将部门存储为";“分隔的记录。例如部门=计算机;民用
现在我想用部门过滤数据,假设前面有一个多选择,我有部门列表,我选择了两个部门->计算机、民用和后端,我得到了List<String> deparmentFilter作为参数,比如计算机;
现在,根据我的要求,我必须从返回两个数据
现在我所做的就是执行查询来获取所有的记录,然后我就在逻辑下面
List<Employee> employeesToBeRemoved = new ArrayList<>();
if (!departmentNames.isEmpty()) {
allEmployees.forEach(employee -> {
if (employee.getDepartment() != null) {
Set<String> departmentNamesResult = new HashSet<>(Arrays.asList(employee.getDepartment().
split(";")));
Boolean isExist = Collections.disjoint(departmentNamesResult, departmentNames);
if (Boolean.TRUE.equals(isExist)) {
employeesToBeRemoved.add(employee);
}
} else {
employeesToBeRemoved.add(employee);
}
});
}
allEmployees.removeAll(employeesToBeRemoved);我试图将它移到谓词中,但无法执行,这个解决方案需要很长时间来执行,请建议我一些其他更好的方法(优化方法)来提高性能。是否有任何方法将此筛选器添加到谓词中?
发布于 2022-12-02 12:05:32
通过拆分表并使用join,您可以获得更好的性能:
class Employee { Integer id; String name; Integer departmentsId; }
class EmployeeDepartments { Integer departmentsId; String department; }
您可以使用元素收集来实现这一点。
现在,不要使用下面的行:
1,Chaitanya,Computer;Civil你将有以下情况:
table1:
1,Chaitanya,123
table2:
123,Compter
123,Civil使用table2和table1执行一个连接以获取所有行,以获得结果
https://stackoverflow.com/questions/74654603
复制相似问题