让我们假设我有一个Stream<T>并且想要只获得不同的元素并进行排序.
天真的方法是做到以下几点:
Stream.of(...)
.sorted()
.distinct()
Run Code Online (Sandbox Code Playgroud)
或者,也许相反:
Stream.of(...)
.distinct()
.sorted()
Run Code Online (Sandbox Code Playgroud)
由于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;
};
}
Run Code Online (Sandbox Code Playgroud)