Предположим, что у меня есть Stream<T>
и вы хотите получить только отдельные элементы и отсортированы.
Наивный подход состоял бы в следующем:
Stream.of(...)
.sorted()
.distinct()
или, может быть, наоборот:
Stream.of(...)
.distinct()
.sorted()
Поскольку реализация обоих из них на самом деле недоступна исходным кодом JDK, я просто задавался вопросом о возможном потреблении памяти и производительности.
Или было бы еще эффективнее написать собственный фильтр следующим образом?
Stream.of(...)
.sorted()
.filter(noAdjacentDuplicatesFilter())
public static Predicate<Object> noAdjacentDuplicatesFilter() {
final Object[] previousValue = {new Object()};
return value -> {
final boolean takeValue = !Objects.equals(previousValue[0], value);
previousValue[0] = value;
return takeValue;
};
}