Ale*_*iev 0 java algorithm collections guava data-structures
举两个多重集,例如,第一个:
Green
Green
Blue
Yellow
Yellow
Yellow
Cyan
Cyan
Run Code Online (Sandbox Code Playgroud)
第二个:
Green
Yellow
Yellow
Magenta
Black
Black
Run Code Online (Sandbox Code Playgroud)
我需要得到他们的交集,以便结果看起来像:
Green
Green
Green
Yellow
Yellow
Yellow
Yellow
Yellow
Run Code Online (Sandbox Code Playgroud)
在Java中实现这一目标的有效方法是什么?(任何链接到库或函数将不胜感激.)
看起来您想要多重集合的总和,过滤为仅包含在其交集中至少出现一次的元素.这里有一种方法可以获得您在Guava中寻找的结果:
ImmutableMultiset<String> first = ImmutableMultiset.of(
"Green", "Green",
"Blue",
"Yellow", "Yellow", "Yellow",
"Cyan", "Cyan");
ImmutableMultiset<String> second = ImmutableMultiset.of(
"Green",
"Yellow", "Yellow",
"Magenta",
"Black", "Black");
Multiset<String> result = Multisets.filter(
Multisets.sum(first, second),
Predicates.in(Multisets.intersection(first, second)));
System.out.println(result); // [Green x 3, Yellow x 5]
Run Code Online (Sandbox Code Playgroud)