3 回答

TA貢獻1835條經驗 獲得超7個贊
因為您正在使用List
for 循環為兩個 s 編制索引,所以您可以將其替換為 anIntStream
并將其縮減為IntStream#anyMatch
:
return?IntStream.range(1,?orderedList.size()) ????????????????.anyMatch(i?->?isDifferent(ordered.get(i?-?1),?ordered.get(i)));
雖然,我并沒有真正看到這提供了多少好處,所以將它保留為 for 循環可能更具可讀性。

TA貢獻1864條經驗 獲得超2個贊
這里的基本操作稱為“壓縮”:給定兩個流As 和Bs 以及一個組合運算符(A, B) -> C,您可以創建一個 s 流C(截斷為較短的輸入流)。假設你有這樣的功能
<A, B, C> Stream<C> zip
?(Stream<? extends A> as, Stream<? extends B> bs,
? BiFunction<? super A, ? super B, ? extends C> combine);
您可以將您的操作實現為
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
標準庫中沒有。如果您使用的是像 Guava 這樣的東西,您可以檢查它是否有這個操作,或者,您可以自己實現它并將其粘貼到某個實用程序類中,我將重現那里列出的代碼(它似乎是從實際 Streams API 的測試版抄襲而來):
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貢獻1806條經驗 獲得超5個贊
按照你的邏輯不就是這么簡單嗎?
return orderedList.stream.distinct().count() != 1; // assuming that you have equals and
// hashcode method overridden for
// your object.
添加回答
舉報