无法访问谓词所需的参数

问题描述 投票:0回答:1

我有以下两种方法method1和method2:

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)))
            )
        )
    );
}

如您所见,它是同一段代码,除了我在removeIf方法中有两个不同的谓词是:

!DateUtil.isBetween(fc.getT().getDateT(), p.get(0), p.get(1))

!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))
        )
    );
}

问题是我不知道如何在“ extractedMethod”中传递“ fc”对象?

先谢谢您。

java lambda predicate functional-interface
1个回答
0
投票

removeIf()removeIf(),其中Predicate<? super E>E返回的集合中的任何类型。为了得到这个答案,将其设为getFicheControles()

© www.soinside.com 2019 - 2024. All rights reserved.