Java 无法访问谓词中所需的参数

Java 无法访问谓词中所需的参数,java,lambda,predicate,functional-interface,Java,Lambda,Predicate,Functional Interface,我有以下两种方法:方法1和方法2: public void method1(){ List<Integer> p = ... listRefCtl.forEach(x-> x.getDomains().forEach(domain -> domaine.getRisks().forEach(risk ->

我有以下两种方法:方法1和方法2:

public void method1(){
List<Integer> p = ...

listRefCtl.forEach(x->
                    x.getDomains().forEach(domain ->
                            domaine.getRisks().forEach(risk ->
                                    attribution.getFicheControles().removeIf(fc ->
                                                            !DateUtil.isBetween(fc.getT().getDateT(), p.get(0), p.get(1)))))
                            )
                    )
            );
}


public void method2(){
List<Integer> p = ...

listRefCtl.forEach(x->
                    x.getDomains().forEach(domain ->
                            domaine.getRisks().forEach(risk ->
                                    attribution.getFicheControles().removeIf(fc ->
                                                            !DateUtil.isAfter(date1, date2)))
                            )
                    )
            );
}

我想提取这样一个方法

public void method1(){
    List<Integer> p = ...
    extractedMethod(() -> !DateUtil.isBetween(fc.getT().getDateT(), p.get(0), p.get(1)));
}

public void method2(){
    List<Integer> p = ...
    extractedMethod(() -> !DateUtil.isAfter(date1, date2));
}

public void extractedMethod(predicate){
listRefCtl.forEach(x->
                    x.getDomains().forEach(domain ->
                            domaine.getRisks().forEach(risk ->
                                    attribution.getFicheControles().removeIf(predicate)))
                            );
}
公共作废方法1(){
列表p=。。。
extractedMethod(()->!DateUtil.isBetween(fc.getT().getDateT(),p.get(0),p.get(1));
}
公开作废方法2(){
列表p=。。。
extractedMethod(()->!DateUtil.isAfter(date1,date2));
}
公共void extractedMethod(谓词){
listRefCtl.forEach(x->
x、 getDomains().forEach(域->
domaine.getRisks().forEach(风险->
attribute.getfichecontrolles().removeIf(谓词)))
);
}
问题是我不知道如何在“extractedMethod”中传递“fc”对象


提前谢谢。

接受一个
谓词这里什么是
date1
date2
?那么
fc
的类型是什么?下面的答案被接受。谢谢你@Kirill SimonovPassing通用E是我所缺少的。非常感谢你,安德烈亚斯
!DateUtil.isAfter(date1, date2)
public void method1(){
    List<Integer> p = ...
    extractedMethod(() -> !DateUtil.isBetween(fc.getT().getDateT(), p.get(0), p.get(1)));
}

public void method2(){
    List<Integer> p = ...
    extractedMethod(() -> !DateUtil.isAfter(date1, date2));
}

public void extractedMethod(predicate){
listRefCtl.forEach(x->
                    x.getDomains().forEach(domain ->
                            domaine.getRisks().forEach(risk ->
                                    attribution.getFicheControles().removeIf(predicate)))
                            );
}
public void method1() {
    List<Integer> p = ...
    extractedMethod(fc -> !DateUtil.isBetween(fc.getT().getDateT(), p.get(0), p.get(1)));
}
public void method2() {
    List<Integer> p = ...
    extractedMethod(fc -> !DateUtil.isAfter(date1, date2));
}
public void extractedMethod(Predicate<Foo> filter) {
    listRefCtl.forEach(x->
            x.getDomains().forEach(domain ->
                    domaine.getRisks().forEach(risk ->
                            attribution.getFicheControles().removeIf(filter)
                            )));
}