3 回答

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)可能更具可讀性。

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);
}

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.
添加回答
舉報(bào)