假设有一个来自类Target
的对象和来自类FriendOfTarget
的一组对象,例如
public class Target{
private List<FriendOfTarget> completeListOfFriendOfTargets;
public boolean matchSomething(FriendOfTarget fot){
//do something by comparing the fields of Target and FriendOfTarget
}
public List<FriendOfTarget> reduce(){
//
}
}
public class FriendOfTarget{
//
}
如果我想构建FriendOfTarget
个对象的列表,在Java7中我在类reduceByParam
的方法Target
内执行以下操作:
public List<FriendOfTarget> reduce(){
List<FriendOfTarget> lst= new ArrayList<>();
for(FriendOfTarget fot: completeListOfFriendOfTargets){
if(reduceByThis(fot))
lst.add(fot);
}
return lst;
}
我如何在Java8中做同样的事情?我在查找如何将this
引用到anyMatch
的{{1}}方法时遇到了一些困难。
答案 0 :(得分:2)
实现功能接口有两种方法,即 this :
fot -> reduceByThis(fot)
this::reduceByThis
lambda表达式可以以与封闭范围相同的方式访问this
。这意味着您可以在有资格和无资格的情况下调用方法reduceByThis
。对于方法引用,可以显式绑定该目标对象。以下示例仅显示后者:
public List<FriendOfTarget> reduce() {
return completeListOfFriendOfTargets
.stream()
.filter(this::reduceByThis)
.collect(toList());
}
您还可以在lambda表达式中显式使用this
。正如我已经提到的,它指的是封闭范围的this
(与匿名内部类相反)。例如:
public List<FriendOfTarget> reduce() {
return completeListOfFriendOfTargets
.stream()
.filter(fot -> fot.reduceOtherDirection(this))
.collect(toList());
}