如何根据自己的Equal类消除流中的重复条目

Chr*_*utz 5 java equality java-8 java-stream

我确实有像这里描述的类似问题.但首先我有两个不同之处,我确实使用了流api,第二个我已经有了一个equals()hashCode()方法.但是在流中,博客的平等性在这种情况下与Blog课堂上定义的不同.

Collection<Blog> elements = x.stream()
    ... // a lot of filter and map stuff
    .peek(p -> sysout(p)) // a stream of Blog
    .? // how to remove duplicates - .distinct() doesn't work
Run Code Online (Sandbox Code Playgroud)

我有一个具有相等方法的类,可以ContextBlogEqual使用该方法调用它

public boolean equal(Blog a, Blog b);
Run Code Online (Sandbox Code Playgroud)

有没有办法根据ContextBlogEqual#equal方法使用我当前的流方法删除所有重复的条目?

我认为已经在分组,但这也不起作用,因为为什么blogAblogB相等的原因不仅仅是一个参数.此外,我不知道如何使用.reduce(..),因为还有一个以上的元素.

Mar*_*nik 4

本质上,您要么必须定义hashCode以使数据与哈希表一起使用,要么必须定义全序以使其与二叉搜索树一起使用。

对于哈希表,您需要声明一个包装类,它将覆盖equalshashCode

对于二叉树,您可以定义一个Comparator<Blog>尊重您的平等定义并添加任意但一致的排序标准的树。然后你就可以收集到一个new TreeSet<Blog>(yourComparator).