
对列表的去重处理,Java 8 在 Stream
接口上提供了类似于 SQL 语句那样的 distinct()
方法,不过它也只能基于对象整体比较来去重,即通过 equals/hashCode 方法。distinct
方法的功效与以往的 new ArrayList(new HashSet(books))
差不多。用起来是
List<Book> unique = book.stream().distinct().collect(Collectors.toList())
并且这种去重方式需要在模型类中同时实现 equals 和 hashCode 方法。
回到实际项目中来,我们很多时候的需求是要根据对象的某个属性来去重。比如接下来的一个实例,一个 books 列表中存在 ID 一样,name 却不同的 book, 我们认为这是重复的,所以需要根据 book 的 id 属性对行去重。在 collect 的时候用到的方法是 collectinAndThen(...)
, 下面是简单代码: 阅读全文 >>