我能得到這個與拉姆達的返回void並使用哈希表的同時在0 ARGS工作,看到這裏 - >Create lambda two dimensional array初始化Lambda表達式Runnable的陣列(串ARG並返回boolean)和呼叫指數
現在,我正試圖創建一個Runnable[]
數組,並在索引中使用lambda,並且每個lambda使用一個String參數並返回一個布爾值。
這裏是代碼...
public class testLambdaWithPrimitiveType {
private final String[] numArray = {"One", "Two", "Three"};
private boolean numFound = false;
testLambdaWithPrimitiveType(String num){
setNumFound(num);
}
private void setNumFound(String num){
Runnable[] runnableNumArray = {
() -> isStringOne(num),
() -> isStringTwo(num),
() -> isStringThree(num)
};
for (int numChecked = 0; numChecked < runnableNumArray.length; numChecked++){
if (runnableNumArray[numChecked].run(num)){
this.numFound = true;
}
}
}
private boolean isNumFound(){return this.numFound;}
private boolean isStringOne(String num){
return num.equals(numArray[0]);
}
private boolean isStringTwo(String num){
return num.equals(numArray[1]);
}
private boolean isStringThree(String num){
return num.equals(numArray[2]);
}
public static void main(String[] args) {
testLambdaWithPrimitiveType objectOne = new testLambdaWithPrimitiveType("One");
testLambdaWithPrimitiveType objectTwo = new testLambdaWithPrimitiveType("Two");
testLambdaWithPrimitiveType objectThree = new testLambdaWithPrimitiveType("Three");
testLambdaWithPrimitiveType objectFour = new testLambdaWithPrimitiveType("Four");
System.out.println(objectFour.isNumFound()); // false
System.out.println(objectThree.isNumFound()); // true
System.out.println(objectTwo.isNumFound()); // true
System.out.println(objectOne.isNumFound()); // true
}
}
它看起來像數組被正確初始化,但是當我嘗試對指數if (runnableNumArray[numChecked].run(num)){
打電話,我得到一個編譯錯誤。任何想法爲什麼發生這種情況?
完美這正是我正在尋找。不知道謂詞庫。謝謝你:) –
在我真正的應用程序中,我必須堅持for循環(因爲索引號會告訴我下一個需要執行的Runnable數組在哪裏),但是知道如何使用for-每個循環也是如此:) –
'predicate'是一個返回'boolean'的方法。 'java.util.function'包有一組謂詞接口,用於常用參數:'謂詞'(一個對象參數),'IntPredicate'('int'參數),'LongPredicate'('long'參數), 'DoublePredicate'('double'參數)和'BiPredicate'(兩個對象參數)。對於任何其他類型的參數,您必須編寫自己的界面。 –
Andreas