我正在嘗試比較兩個陣列的最小值。
我收到以下編譯錯誤:
運算子“>”不能應用于“java.util.OptionalInt”、“java.util.OptionalInt”
我究竟做錯了什么?
我的代碼:
public static void main(String[] args) {
int [] ints = {12,6,8,242};
int [] ints1 = {5,1,5432,5,76,146,8};
if(Arrays.stream(ints).min()>Arrays.stream(ints1).min()){
System.out.println(Arrays.stream(ints1).min());
}
}
uj5u.com熱心網友回復:
這里的問題是min回傳一個OptionalInt. 這是因為呼叫min空流將是荒謬的(它將回傳什么 int ?)。
如果你確定你的流永遠不會是空的,你可以呼叫get結果min來解開可選項,如果它是空的則拋出。我建議在空流的情況下指定一些行為。Optional上有多種方法可以輕松完成此操作。(OptionalInt具有與原語相同的 API,Optional<T>但包裝了一個原語int)
uj5u.com熱心網友回復:
min()檢索OptionalInt. 因此,要獲取和原始int,您必須呼叫getAsInt():
int[] one = { 12, 6, 8, 242 };
int[] two = { 5, 1, 5432, 5, 76, 146, 8 };
if (Arrays.stream(one).min().getAsInt() > Arrays.stream(two).min().getAsInt())
System.out.println(Arrays.stream(two).min().getAsInt());
另一種選擇是使用Apache:
import org.apache.commons.lang.math.NumberUtils;
int[] one = { 12, 6, 8, 242 };
int[] two = { 5, 1, 5432, 5, 76, 146, 8 };
if (NumberUtils.min(one) > NumberUtils.min(two))
System.out.println(NumberUtils.min(two));
uj5u.com熱心網友回復:
顯然,您不能Optional使用關系運算子比較兩個物件<,或者>它們只能與原始數字一起使用。
簡而言之,Optional- 是一個資料容器,它可能包含結果值,也可能不包含結果值。不管結果是否存在,你都可以安全地與這個容器互動,這就是 Optional 背后的核心思想。
可選 API 包含許多用于撥號的方法。您可以使用可選項執行各種操作(例如轉換或過濾其值),而無需解壓縮它。當獲得另一個答案中提到的包含值get()(或getAsInt()在 的情況下)是您應該考慮的最后一個選項。OptionalInt
這是Java 語言架構師 Brian Goetz的回答。
永遠不要打電話
Optional.get,除非你能證明它永遠不會是 null;而是使用一種安全方法,例如orElseorifPresent。回想起來,我們應該呼叫 get something likegetOrElseThrowNoSuchElementException或者更清楚地表明這是一種高度危險的方法,它首先破壞了 Optional 的整個目的。學過的知識。更新: Java 10 具有
Optional.orElseThrow(),在語意上等同于get(),但其名稱更合適。
為了對 Optional 中包含的結果執行操作,API 提供了一個方法Optional.ifPresent(),該方法需要一個表示該操作的消費者,如果值存在,它將被觸發。
您可以比較 Optionals 中包含的兩個值,并使用以下方法列印它們中的第一個,并且第一個大于第二個:
int[] ints = {12, 6, 8, 242};
int[] ints1 = {5, 1, 5432, 5, 76, 146, 8};
getMin(ints).ifPresent(min1 -> getMin(ints1).ifPresent(min2 -> {
if (min1 > min2) System.out.println(min1);
}));
為了避免重復生成可選結果的相同流陳述句,我們可以引入一個方法:
public static OptionalInt getMin(int[] arr) {
return Arrays.stream(arr).min();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/525735.html
上一篇:我如何加入這些陣列是一個?
下一篇:文本陣列的影片在幾個條目后停止
