Stream去重

  1. String去重

        List strList = Arrays.asList("a", "a", "b", "b", "c");
        strList.stream().distinct().collect(Collectors.toList()).forEach(System.out::println);
    

    输出结果:

    Stream去重_第1张图片

  2. 其他自定义对象去重,则必须重写hashCode(),equal()方法,不然去重失败。
    因为stream().distinct()在执行的时候,会调用Object类原始的hashCode(),equal()方法来判断对象是否相等,如果不重写的话equal()会一直返回false,从而去重失败。

    附Object类的源码:

        public native int hashCode(); // Object默认使用的是本地的hashcode()方法
    
        public boolean equals(Object obj) {
             return (this == obj); 	// 只有对象的地址都一样的时候才返回true
          }
    

你可能感兴趣的:(Java)