在Java中,如何在if lambda条件内声明变量?

Lor*_*ith 4 java lambda java-8

在我的代码中,我有一个谓词方法,i如果满足某些条件,该方法将返回,并且我需要在其中声明一个变量,但是该方法是用lambda编写的,我不知道该怎么做。这是我的代码:

public static Predicate<MFDWHDealExt> isAccepted() {
        MyCalendar startDate = new MyCalendar();

        return (i -> 
                i.getCompany().equals("ACCEPTED")
                && i.getDealType() == MFDealTypeEnum.AcceptedDeal              
                && i.getSettlementDate().beforeOrEqual(startDate.findDay(i.getDealDate(), 2, true))
                );
    }
Run Code Online (Sandbox Code Playgroud)

我需要使用值声明startDate(自定义日期MyDatei.getSettlementDate,否则需要方法findDay(返回工作日),因为现在是null

Gho*_*ica 5

这里:

    return (i -> { 
            return i.getCompany().equals("ACCEPTED")
              && i.getDealType() == MFDealTypeEnum.AcceptedDeal              
              && i.getSettlementDate().beforeOrEqual(startDate.findDay(i.getDealDate(), 2, true))
            });
Run Code Online (Sandbox Code Playgroud)

使用lambda的单行语法(例如)时x-> 2*x,您需要使用大括号。当您要声明局部变量时,不能使用该单行语法。

请参阅此处获取官方文档!

换句话说:当您要编写多个语句(例如实际定义局部变量)时,则需要这些花括号!

最后:小心您在这里做什么。(imho)Lambda表达式应该真正简短。当它们变得“更加复杂”时(例如:它们需要局部变量),那么我建议不要使用lambda,而应声明一个实际方法并进行调用。