第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算流中的元素并返回 Integer insted of long

計算流中的元素并返回 Integer insted of long

泛舟湖上清波郎朗 2021-08-06 10:47:17
我需要計算流中的元素并將其分配給一個整數(shù)而不進行轉(zhuǎn)換。.count() 確實返回很長時間想了想,.collect(Collectors.reducing(..))卻想不通。我覺得有些簡單的東西我不明白。我的嘗試:Stream<String> s = Stream.of("Hallo ", "Test", "String");Integer count = s.filter(e -> (e.length() >= lb && e.length() <= ub && !e.contains(" ")))                 .map(e -> e.toUpperCase())                 .distinct()                 .collect(Collectors.reducing(0, e -> 1, Integer::sum)));System.out.println(count);
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

簡單地說:不要。

不要投,也不要把事情搞得太復雜。

而是尋找安全的方法從count(). 初學者請看這里

int bar = Math.toIntExact(someLong);

例如。當您 100% 確定計算出的值總是適合 int 時,您只需避免放下可能拋出的 ArithmeticException 的捕獲。而且你仍然有一種感覺,你不能在沒有注意到的情況下“超越”。

但正如所說:不要將時間/精力投入到專門計算您自己的東西上,當您可以使用內(nèi)置功能來計算事物并將它們轉(zhuǎn)換為 int/Integer 時。請記?。耗斎氪a的每個字符都需要稍后閱讀和理解。因此,隨著時間的推移,即使是“20 個字符”也會增加。所以當你總是傾向于更短的解決方案時,只要它們易于閱讀/理解。


查看完整回答
反對 回復 2021-08-06
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

這是正確的方法。轉(zhuǎn)換所有的不同的值,以1使用Stream::mapToInt-它產(chǎn)生IntStream具有sum/count 能的情況下直接映射來處理數(shù)值的方法流:

Integer count = s.filter(e -> (e.length() >= lb && e.length() <= ub && !e.contains(" ")))
                 .map(String::toUpperCase)
                 .distinct()
                 .mapToInt(i -> 1)
                 .sum();

無需映射到int,您可以使用Stream::reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)來獲得完全相同的結(jié)果:

Integer count = s.filter(e -> (e.length() >= 2 && e.length() <= 10 && !e.contains(" ")))
                 .map(String::toUpperCase)
                 .distinct()
                 .reduce(0, (a,b) -> a + 1, (a,b) -> a + b);

這個方法的接口有點復雜:

  • U identity 設置為 0 - 開始計數(shù)

  • accumulator(a,b) -> a + 1) 將字符串轉(zhuǎn)換為int,每個字符串將被轉(zhuǎn)換為 1 并添加到前一個結(jié)果 (0+1+1+1...)。

  • combiner組合兩個連續(xù)值 ( (a,b) -> a + b) -值的總和,1實際上是計數(shù)。


查看完整回答
反對 回復 2021-08-06
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

如果您想在不使用內(nèi)置 .count() 方法的情況下計算流中的元素,那么您可以將每個元素映射到一個 int 并通過對它們求和來減少。像這樣的東西:

Integer count = s.mapToInt(i -> 1).reduce((a, b) -> a + b).orElse(0);

或者正如@Holger 在下面評論的那樣在映射后使用 sum() 。

Integer count = s.mapToInt(i -> 1).sum();


查看完整回答
反對 回復 2021-08-06
  • 3 回答
  • 0 關注
  • 282 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號