Java 8 Stream.distinct() 列表去重示例


Java 8 Stream.distinct() 示例  

    在这篇文章里,我们将提供Java8 Stream distinct()示例。 distinct()返回由该流的不同元素组成的流。distinct()是Stream接口的方法。distinct()使用hashCode()和equals()方法来获取不同的元素。因此,我们的类必须实现hashCode()和equals()方法。如果distinct()正在处理有序流,那么对于重复元素,将保留以遭遇顺序首先出现的元素,并且以这种方式选择不同元素是稳定的。在无序流的情况下,不同元素的选择不一定是稳定的,是可以改变的。distinct()执行有状态的中间操作。在有序流的并行流的情况下,保持distinct()的稳定性是需要很高的代价的,因为它需要大量的缓冲开销。如果我们不需要保持遭遇顺序的一致性,那么我们应该可以使用通过BaseStream.unordered()方法实现的无序流。

1. Stream.distinct()

distinct()方法的声明如下:
Stream distinct()

它是Stream接口的方法。在此示例中,我们有一个包含重复元素的字符串数据类型列表

DistinctSimpleDemo.java

  1.   package com.concretepage;
  2.   import java.util.Arrays;
  3.   import java.util.List;
  4.   import java.util.stream.Collectors;
  5.   public class DistinctSimpleDemo {
  6.   public static void main(String[] args) {
  7.   List list = Arrays.asList("AA", "BB", "CC", "BB", "CC", "AA", "AA");
  8.   long l = list.stream().distinct().count();
  9.   System.out.println("No. of distinct elements:"+l);
  10.   String output = list.stream().distinct().collect(Collectors.joining(","));
  11.   System.out.println(output);
  12.   }
  13.   }
Output  
  1.   No. of distinct elements:3
  2.   AA,BB,CC

https://www.concretepage.com/java/jdk-8/java-8-distinct-example