我想在使用流合并它们之后,只保留两个数组的唯一值。它不是我正在寻找的distinct()
函数:
int[] a = { 1, 2, 3 };
int[] b = { 3, 4, 5 };
int[] c = IntStream.concat(Arrays.stream(a), Arrays.stream(b)).distinct().toArray();
给我c = {1, 2, 3, 4, 5}
,但我需要c
为{1, 2, 4, 5}
是否有一种简单快捷的方法可以使用流来实现这一目标?
答案 0 :(得分:4)
你可以这样做:
int[] a = { 1, 2, 3 };
int[] b = { 3, 4, 5 };
int[] c = IntStream.concat(Arrays.stream(a), Arrays.stream(b))
.boxed()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(Function.identity(), Collectors.counting()), // Freq map
m -> m.entrySet().stream()
.filter(e -> e.getValue() == 1) // Filter duplicates
.mapToInt(e -> e.getKey())
.toArray()
));
首先为所有元素创建频率图,然后过滤掉多次出现的元素。