我想了解流和遇到問題: 我想獲得列表的最小值並將其分配給一個int變量。 對於我做了以下內容:Java 8流「ifPresent」
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int smallest = list.stream().min(Integer::compareTo).get();
System.out.println(smallest);
這工作得很好,我得到1
結果。 問題是在檢查.isPresent
之前,IDE會提示Optional.get
。 要解決,我使用的略有不同ifPresent
方法和嘗試以下操作:
int smallest = list.stream().min(Integer::compareTo).ifPresent(integer -> integer);
不幸的是,因爲我得到警告,這並不工作:Bad return type in Lambda, Integer cannot be converted to void.
我的問題總算是:我怎樣才能分鐘值賦給int smallest
變量與檢查ifPresent?
你首先必須明白爲什麼你得到一個可選的,而不是一個整數:因爲該流可能是空的,因此可能沒有任何最小值。然後,如果流爲空,則需要決定想要得到的結果。然後,一旦你知道你想要什麼,你就可以通過查看Optional的文檔來選擇正確的方式來獲得結果。 –
'ifPresent'接受'Consumer'作爲它的參數,它消耗輸入值並不返回任何內容。 –