リスト内のすべての数値がグループ化されていることを確認します。私は例でこれを説明してみましょう:ストリーム内の重複グループを検出する
{1, 1, 1, 2, 2} // OK, two distinct groups
{1, 1, 2, 2, 1, 1} // Bad, two groups with "1"
{1, 2, 3, 4} // OK, 4 distinct groups of size 1
{1, 1, 1, 1} // OK, 1 group
{3, 4, 3} // Bad, two groups with "3"
{99, -99, 99} // Bad, two groups with "99"
{} // OK, no groups
は、ここで私は、ストリームを得る方法は次のとおりです。
IntStream.of(numbers)
...
今、私が悪い」に渡すか、「OK」の例についてはtrueを返すとAssertionError
を投げるか、falseを返す必要があります"例。 Stream APIを使用してどうすればいいですか?私の自由StreamExライブラリを使用して
Set<Integer> previousNumbers = new HashSet<>();
IntStream.of(numbers)
.reduce(null, (previousNumber, currentNumber) -> {
if (currentNumber == previousNumber) {
assertThat(previousNumbers).doesNotContain(currentNumber);
previousNumbers.add(currentNumber);
}
return currentNumber;
}
);
あなたの解決策は正しいものではありません。現在の実装(明らかに逐次実行を前提としています)を考えればうまくいくかもしれませんが、この関数は連想の必要条件にはっきりと違反しています。残念ながら、第三者の助けがなければ簡単な解決策はありません。 – Holger
@Holgerは "連合性要件"を説明できますか? –
@MichalKordasについては、[documentation](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-T-java.util.function.BinaryOperator- ):アキュムレータは、仕様によって連想されなければならない。 –