Java中的Multiset交叉式操作

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中实现这一目标的有效方法是什么?(任何链接到库或函数将不胜感激.)

Col*_*inD 5

看起来您想要多重集合的总和,过滤为仅包含在其交集中至少出现一次的元素.这里有一种方法可以获得您在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)