如何在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
答案 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();