Erkennen Sie doppelte Gruppen in stream
Ich möchte sicherstellen, dass alle Nummern in der Liste zusammengefasst sind. Lassen Sie mich dies an Beispielen erläutern:
{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
So erhalte ich den Stream:
IntStream.of(numbers)
...
Nun muss ich für "OK" -Beispiele true übergeben oder zurückgeben und @ werfAssertionError
oder bei "Bad" -Beispielen false zurückgeben. Wie kann ich das mit Stream API machen?
Hier ist meine aktuelle Lösung mit zusätzlichenSet
erstellt:
Set<Integer> previousNumbers = new HashSet<>();
IntStream.of(numbers)
.reduce(null, (previousNumber, currentNumber) -> {
if (currentNumber == previousNumber) {
assertThat(previousNumbers).doesNotContain(currentNumber);
previousNumbers.add(currentNumber);
}
return currentNumber;
}
);