Java lambda表达式对外部方法的冗余调用——如何重写?
我试图习惯使用lambda表达式,但我经常遇到以下基本问题:Java lambda表达式对外部方法的冗余调用——如何重写?,java,lambda,Java,Lambda,我试图习惯使用lambda表达式,但我经常遇到以下基本问题: public List<Location> findAllAccessByUser(User user) { return listDao.getAccessList(user).stream() .filter(list -> findBySubOrgId(list.getOwnerOrg().getId()).isPresent()) .map(li
public List<Location> findAllAccessByUser(User user) {
return listDao.getAccessList(user).stream()
.filter(list -> findBySubOrgId(list.getOwnerOrg().getId()).isPresent())
.map(list -> findBySubOrgId(list.getOwnerOrg().getId()).get())
.collect(Collectors.toList());
}
公共列表findalAccessByUser(用户){
返回listDao.getAccessList(user.stream())
.filter(list->findBySubOrgId(list.getOwnerOrg().getId()).isPresent())
.map(list->findBySubOrgId(list.getOwnerOrg().getId()).get())
.collect(Collectors.toList());
}
这种方法
正如我所写的,它完全按照我的预期工作,但我总是尝试优化我的代码,并且学习正确的方式做事情从来没有坏处。重写这个的“正确”方法是什么?还是像现在这样好
首先将
映射到可选
,然后过滤出不存在的值,然后将
映射到它们的值。(或者使用orElse(null)
和filter
outnull
值跳过map
步骤。)map
首先映射到可选的,然后过滤出不存在的值,然后映射到它们的值。(或者使用orElse(null)
和filter
outnull
值跳过map
步骤。)这一点现在看起来很明显。谢谢对于纯方法引用版本,将第一个map()
调用替换为map(XX::getOwnerOrg).map(XX::getId).map(this::findBySubOrgId)
,其中两个XX
是适当的类名,并假设findBySubOrgId()
是非静态的。现在看来这很明显。谢谢对于纯方法引用版本,将第一个map()
调用替换为map(XX::getOwnerOrg).map(XX::getId).map(this::findBySubOrgId)
,其中两个XX
是适当的类名,并假设findBySubOrgId()
是非静态的。
return listDao.getAccessList(user).stream()
.map(list -> findBySubOrgId(list.getOwnerOrg().getId()))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList())