Java流:如何高效地执行“去重和排序”操作?

21 浏览
0 Comments

Java流:如何高效地执行“去重和排序”操作?

假设我有一个Stream,想要获取只有独特元素并且已排序的流。幼稚的方法就是只需按照以下步骤执行:

Stream.of(...)
    .sorted()
    .distinct()

或者,也可以换个顺序:

Stream.of(...)
    .distinct()
    .sorted()

由于它们的实现实际上不太容易通过JDK的源代码访问,我只是想知道可能的内存消耗和性能影响。或者编写自己的过滤器是否更高效,如下所示?

Stream.of(...)
    .sorted()
    .filter(noAdjacentDuplicatesFilter())
public static Predicate noAdjacentDuplicatesFilter() {
    final Object[] previousValue = {new Object()};
    return value -> {
        final boolean takeValue = !Objects.equals(previousValue[0], value);
        previousValue[0] = value;
        return takeValue;
    };
}

0