首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据字符串条件查询谓词列表获取记录

根据字符串条件查询谓词列表获取记录
EN

Stack Overflow用户
提问于 2022-12-02 10:54:58
回答 1查看 28关注 0票数 1

我创建了一个类

class Employee { Integer id; String name; String departments; }

在sql server数据库中,我将部门存储为";“分隔的记录。例如部门=计算机;民用

  • 1,柴坦尼亚,计算机;民用
  • 2,Tom,物理学;化学
  • 3、哈里,经济学;商业
  • 4,亨利,计算机;民用;机械
  • 5,Ravi,null

现在我想用部门过滤数据,假设前面有一个多选择,我有部门列表,我选择了两个部门->计算机、民用和后端,我得到了List<String> deparmentFilter作为参数,比如计算机;

现在,根据我的要求,我必须从返回两个数据

  • 1,柴坦尼亚,计算机;民用
  • 4,亨利,计算机;民用;机械

现在我所做的就是执行查询来获取所有的记录,然后我就在逻辑下面

代码语言:javascript
复制
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);

我试图将它移到谓词中,但无法执行,这个解决方案需要很长时间来执行,请建议我一些其他更好的方法(优化方法)来提高性能。是否有任何方法将此筛选器添加到谓词中?

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2022-12-02 12:05:32

通过拆分表并使用join,您可以获得更好的性能:

class Employee { Integer id; String name; Integer departmentsId; }

class EmployeeDepartments { Integer departmentsId; String department; }

您可以使用元素收集来实现这一点。

现在,不要使用下面的行:

代码语言:javascript
复制
1,Chaitanya,Computer;Civil

你将有以下情况:

代码语言:javascript
复制
table1:
1,Chaitanya,123

table2:
123,Compter
123,Civil

使用table2和table1执行一个连接以获取所有行,以获得结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74654603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档