小编Mic*_*ner的帖子

Java Streams:如何做一个有效的"独特和排序"?

让我们假设我有一个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)

java performance java-8 java-stream

21
推荐指数
1
解决办法
4478
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1

performance ×1