为了账号安全,请及时绑定邮箱和手机立即绑定

排序和过滤对象列表

排序和过滤对象列表

慕盖茨4494581 2021-12-10 15:41:01
我有一个外部服务,从那里我可以获取组织的所有员工详细信息,如下所示。我正在使用 java8 和 spring cloud feign 客户端来消费服务[  {    "employee": {      "empId": "empId123",      "name": "Emp1",      "houseNumber": "5",      "firstName": "firstName1",      "lastName": "lastName1",      "city": "city1",      "band": "A"    },    "type": "ABC"  },  {    "employee": {      "empId": "empId456",      "name": "Emp2",      "houseNumber": "7",      "firstName": "firstName2",      "lastName": "lastName2",      "city": "city2",      "band": "B"    },    "type": "ABC"  }  :  :]员工详细信息服务有大约 10000 多个员工详细信息。我需要创建另外两个服务根据城市和房屋编号排序并返回所有员工根据某些属性(如city、band、empId等)过滤员工的服务。目前我使用的排序服务如下所示final List<Employees> employeesList = employeeService.getAllEmployees().stream()                .sorted((emp1, emp2) -> p1.getAddress().getCity().compareTo(emp2.getAddress().getCity()))                .sorted((emp1, emp2) -> p1.getAddress().getHouseNumber().compareTo(emp2.getAddress().getHouseNumber()))                .collect(Collectors.toList());为了过滤,我使用下面的代码String cityName = "some city name"...final List<Employees> employeesfilteredList = employeeService.getAllEmployees()    .stream()    .filter(employee -> employee.getAddress().getCity().equalsIgnoreCase(cityName == null ? "" : cityName))    .collect(Collectors.toList());但是我的技术人员客户说这存在性能问题并要求带来一些时间复杂度较低的东西(最好是O(1))来带来结果谁能告诉我我正在使用的当前方法有什么问题,有什么方法可以以任何其他方式或方法即兴发挥
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

我能想到的你当然可以即兴发挥的一件事是调用sorted两次,只能进行一次:


// replacing with 'employees' for 'employeeService.getAllEmployees()'

Comparator<Employees> compareBasedOnCity = 

            Comparator.comparing(emp -> emp.getAddress().getCity());

Comparator<Employees> compareBasedOnHouse = 

            Comparator.comparing(emp -> emp.getAddress().getHouseNumber());

employees.sort(compareBasedOnCity.thenComparing(compareBasedOnHouse));

另一个期间过滤器是避免将null和""字符串视为相同:


List<Employees> finalList = employees.stream()

            .filter(employee -> employee.getAddress().getCity().equalsIgnoreCase(cityName))

            // don't consider empty city name same as null (think of "  " otherwise)

            .collect(Collectors.toList());

但是,由于双方已经指出霍尔格和JB Nizet,这一切都不带来下来的复杂性,从说O(nlogn)要O(1)为你期待。


将其与访问、插入和删除等操作进一步比较也不等效。由于执行的操作也不同。


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号