java - 在java中,如何在if lambda条件declare声明一个变量?

55 5

在我的代码中,我有一个谓词方法,如果满足某些条件,则返回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))


 );


 }



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

时间: 原作者:

112 5

这里:


 return (i -> { 


 return i.getCompany().equals("ACCEPTED")


 && i.getDealType() == MFDealTypeEnum.AcceptedDeal 


 && i.getSettlementDate().beforeOrEqual(startDate.findDay(i.getDealDate(), 2, true))


 });



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

有关官方文档,请参见这里的

换句话说:当你想写几个语句,像实际定义一个局部变量时,你需要这些大括号。

最后:小心你在这做什么。(恕见谅)Lambda表达式应该非常简短简洁,当它们变得更复杂时(比如: 他们需要局部变量,然后我建议不要使用lambda,但是,可以声明一个实际方法,并且调用它。

原作者:
108 0

lambda表达式是实现具有单个方法的接口的匿名类的快捷方式。

你可以在这个独特的方法中定义你喜欢的任何想法。

lambda表达式:


 (a, b) -> {


 // Your code here 


 }



等效于:


 new MyInterface() {


 public ReturnType uniqueMethod(AType a, BType b) {


 // Exactly the same code here


 }


 }



从接口派生的Depeding类型的ReturnType也可以是void,参数数量可以是0,或者任何数量的参数(在这种情况下,ATypeBType的两个参数),

以下形式的lambda表达式:


(a, b) -> something



是另一个快捷方式,等同于:


 new MyInterface() {


 public ReturnType uniqueMethod(AType a, BType b) {


 // Same as before but with the additional keyword return


 return something;


 }


 }



在你的例子中,必须用块{ }应用第一种lambda表达式,并且可以定义括号内的任何类型和数量,

原作者:
83 5

你需要将其扩展到代码块


 return (i -> { 


 int myVar;


 return i.getCompany().equals("ACCEPTED")


 && i.getDealType() == MFDealTypeEnum.AcceptedDeal 


 && i.getSettlementDate().beforeOrEqual(startDate.findDay(i.getDealDate(), 2, true));


 });



原作者:
77 2

在lambda中使用代码块,并且在内部声明变量。


public static Predicate<MFDWHDealExt> isAccepted() {


 MyCalendar startDate = new MyCalendar();



 return (i -> {


 MyDate startDate = i.getSettlementDate();


 boolean result = i.getCompany().equals("ACCEPTED")


 && i.getDealType() == MFDealTypeEnum.AcceptedDeal 


 && startDate.beforeOrEqual(startDate.findDay(i.getDealDate(), 2, true));


 return result;


 });


}



原作者:
...