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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何根據(jù)比較連續(xù)的列表元素將 Java 流減少為布爾值

如何根據(jù)比較連續(xù)的列表元素將 Java 流減少為布爾值

千巷貓影 2023-05-17 14:36:19
作為重構(gòu)練習(xí),我正在嘗試采用以下方法:    for (int i = 1; i < orderedList.size(); i++) {        Object object1 = ordered.get(i - 1);        Object object2 = ordered.get(i);        if (isDifferent(object1, object2)) return true;    }    return false;變成一個(gè)簡(jiǎn)單的 Java 函數(shù)語(yǔ)句。乍一看,我正在按順序處理列表的元素,reduce()聽起來(lái)很有希望,但是它需要攜帶一個(gè)布爾值,這讓我失去了前一個(gè)元素;或者攜帶列表的前一個(gè)元素,這意味著我需要將它放在某種包裝器對(duì)象中,或者笨拙地使用Optional或另一個(gè)List作為包裝器,以便跟蹤我是否有區(qū)別。所以,我看到了可以使用 reduce 操作的方法,但它會(huì)比原來(lái)的 for 循環(huán)更復(fù)雜、更難理解。我看著創(chuàng)建一個(gè)自定義收集器,但遇到了同樣的問(wèn)題。這是對(duì) reduce 的正確使用,還是因?yàn)槲抑牢铱梢允褂盟鼇?lái)處理前一次迭代的順序值而受到誘惑?如果使用得當(dāng),我該如何編寫函數(shù)以將自己簡(jiǎn)化為布爾值?感謝您對(duì)這個(gè)思維練習(xí)的幫助。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

因?yàn)槟谑褂?code>Listfor 循環(huán)為兩個(gè) s 編制索引,所以您可以將其替換為 anIntStream并將其縮減為IntStream#anyMatch

return?IntStream.range(1,?orderedList.size())
????????????????.anyMatch(i?->?isDifferent(ordered.get(i?-?1),?ordered.get(i)));

雖然,我并沒(méi)有真正看到這提供了多少好處,所以將它保留為 for 循環(huán)可能更具可讀性。


查看完整回答
反對(duì) 回復(fù) 2023-05-17
?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

這里的基本操作稱為“壓縮”:給定兩個(gè)流As 和Bs 以及一個(gè)組合運(yùn)算符(A, B) -> C,您可以創(chuàng)建一個(gè) s 流C(截?cái)酁檩^短的輸入流)。假設(shè)你有這樣的功能


<A, B, C> Stream<C> zip

?(Stream<? extends A> as, Stream<? extends B> bs,

? BiFunction<? super A, ? super B, ? extends C> combine);

您可以將您的操作實(shí)現(xiàn)為


zip(ordered.stream(), ordered.stream().skip(1), this::isDifferent).anyMatch(x -> x);

// ordered: a b c d ... y z

// skipped: b c d ... y z

// zipped : (a, b) (b, c) (c, d) ... (y, z)

zip標(biāo)準(zhǔn)庫(kù)中沒(méi)有。如果您使用的是像 Guava 這樣的東西,您可以檢查它是否有這個(gè)操作,或者,您可以自己實(shí)現(xiàn)它并將其粘貼到某個(gè)實(shí)用程序類中,我將重現(xiàn)那里列出的代碼(它似乎是從實(shí)際 Streams API 的測(cè)試版抄襲而來(lái)):

public static<A, B, C> Stream<C> zip(Stream<? extends A> a,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Stream<? extends B> b,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?BiFunction<? super A, ? super B, ? extends C> zipper) {

? ? Objects.requireNonNull(zipper);

? ? Spliterator<? extends A> aSpliterator = Objects.requireNonNull(a).spliterator();

? ? Spliterator<? extends B> bSpliterator = Objects.requireNonNull(b).spliterator();


? ? // Zipping looses DISTINCT and SORTED characteristics

? ? int characteristics = aSpliterator.characteristics() & bSpliterator.characteristics() &

? ? ? ? ? ? ~(Spliterator.DISTINCT | Spliterator.SORTED);


? ? long zipSize = ((characteristics & Spliterator.SIZED) != 0)

? ? ? ? ? ? ? Math.min(aSpliterator.getExactSizeIfKnown(), bSpliterator.getExactSizeIfKnown())

? ? ? ? ? ? : -1;


? ? Iterator<A> aIterator = Spliterators.iterator(aSpliterator);

? ? Iterator<B> bIterator = Spliterators.iterator(bSpliterator);

? ? Iterator<C> cIterator = new Iterator<C>() {

? ? ? ? @Override

? ? ? ? public boolean hasNext() {

? ? ? ? ? ? return aIterator.hasNext() && bIterator.hasNext();

? ? ? ? }


? ? ? ? @Override

? ? ? ? public C next() {

? ? ? ? ? ? return zipper.apply(aIterator.next(), bIterator.next());

? ? ? ? }

? ? };


? ? Spliterator<C> split = Spliterators.spliterator(cIterator, zipSize, characteristics);

? ? return (a.isParallel() || b.isParallel())

? ? ? ? ? ?? StreamSupport.stream(split, true)

? ? ? ? ? ?: StreamSupport.stream(split, false);

}


查看完整回答
反對(duì) 回復(fù) 2023-05-17
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

按照你的邏輯不就是這么簡(jiǎn)單嗎?


return orderedList.stream.distinct().count() != 1; // assuming that you have equals and 

                                                  //  hashcode method overridden for 

                                                  // your object.


查看完整回答
反對(duì) 回復(fù) 2023-05-17
  • 3 回答
  • 0 關(guān)注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)