我開始嘗試使用Labda表達式來實現布爾輸入參數列表的布爾門。 對於 「或」 與 「和」 我寫了下面statments:Java中的XOR布爾值列表的Lambda表達式
OR:expressions.stream().anyMatch(e -> e.evaluate(input));
AND:expressions.stream().allMatch(e -> e.evaluate(input));
e.evaluate(input)
返回TRUE或FALSE。 但由於沒有onceMatch方法allready實現我堅持異或。
第一個想法會過濾所有真值,並檢查它是否只有一個:
return expressions.stream().filter(e -> e.evaluate(input) == true).collect(Collectors.counting()) == 1;
但我想看到它在一個lambda表達式。
你能解釋爲什麼第一個表達式不是XOR,第二個表達式是什麼?我明白,map會創建一個布爾值流:例如[true,false,false,true],但之後我被卡住了。特別是「a^b」部分。這是不是一個bitvise XOR? – froehli
例如'true^true^true == true'儘管沒有確切的一個'true'輸入。從那裏,你可以通過簡單地用'true^false'替換一個'true'來獲得無數的例子,如果你願意的話,例如。取代第一個「真」,我們得到'真'假'真',這也是'真'。 XOR並不意味着「正好一個」真正的「值」...... – Holger
「逐位異或」與「邏輯異或」之間沒有區別。只需將'0'設置爲'false'並將'1'設爲'true',結果將完全相同。 – Holger