有时您想要Stream使用多个条件过滤a :
myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) ...
Run Code Online (Sandbox Code Playgroud)
或者你可以用复杂的条件和单一的方式 做同样的事情filter:
myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) ...
Run Code Online (Sandbox Code Playgroud)
我的猜测是第二种方法具有更好的性能特征,但我不知道.
第一种方法在可读性方面取胜,但性能更好?
我在做简单的测试。
@Test
public void whenFilterEmployees_thenGetFilteredEmployees(){
Integer[] empIds = {1,2,3};
List<Optional<Employee>> employees = Stream.of(empIds)
.map(employeeRepository::findById)
.collect(Collectors.toList());
List<Employee> employeeList = employees
.stream().filter(Optional::isPresent)
.map(Optional::get)
.filter(e->e !=null)
.filter(e->e.getSalary()>200000)
.collect(Collectors.toList());
assertEquals(Arrays.asList(arrayOfEmps[2]), employeeList);
}
Run Code Online (Sandbox Code Playgroud)
我的员工表包含数据:
1 Jeff Bezos 100000
2 Bill Gates 200000
3 Mark Zuckerberg 300000
Run Code Online (Sandbox Code Playgroud)
当前测试成功运行。
如您所见,我准备了两个员工列表,即员工和员工列表
我这样做是因为findById方法返回 Optional。我如何使用流 api 以便我可以简单地获取员工列表
List<Employee> employeeList= ....
Run Code Online (Sandbox Code Playgroud)