打印与Java 8中的Array Stream不同

时间:2017-10-25 18:31:15

标签: java-8

如何在distinct

中打印数组流中的java 8元素

我正在玩Java-8并尝试了解它如何与distinct一起使用。

Collection<String> list = Arrays.asList("A", "B", "C", "D", "A", "B", "C");

// Get collection without duplicate i.e. distinct only
List<String> distinctElements = list.stream().distinct().collect(Collectors.toList());

//Let's verify distinct elements
System.out.println(distinctElements);

// Array Stream
System.out.println("------------------------------");
int[] numbers = {2, 3, 5, 7, 11, 13, 2,3};
System.out.println(Arrays.stream(numbers).sum()); // ==> Sum
System.out.println(Arrays.stream(numbers).count()); // ==> Count
System.out.println(Arrays.stream(numbers).distinct()); // ==> Distinct

最后一行只是给我参考对象,我想要实际值

[A, B, C, D]
------------------------------
46
8
java.util.stream.ReferencePipeline$4@2d98a335 

2 个答案:

答案 0 :(得分:2)

您没有直接看到不同的值,因为IntStream.distinct()不是终端操作,并且如文档中所述返回IntStream

  

返回由此流的不同元素组成的流。

您必须终止自己的流,类似于示例中已有的代码:

List<String> distinctElements = list.stream()
        .distinct()
        .boxed()
        .collect(Collectors.toList());

在这里,您调用Stream.collect(Collector<? super T,A,R> collector)方法作为终端操作,并获得一系列不同的元素作为回报。

Stream.count()IntStream.sum()都是终端操作,他们立即执行计算,关闭流并返回值。

答案 1 :(得分:1)

Arrays.stream()通常会返回Stream,但它有一个重载版本:stream(int[] array),它会返回一个IntStream,这是一个原始整数流。 IntStream.distinct()也会返回IntStream

为了收集它,您可以使用collect(Collectors.toList())

Arrays.stream(numbers)
    .distinct()
    .boxed()
    .collect(Collectors.toList());

您还可以将结果存储到int[]

Arrays.stream(numbers)
    .distinct()
    .toArray();