下面列出了com.google.common.collect.Multiset#setCount ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onChanged(Change<? extends E> change) {
// This cast is safe, as a
// UnidirectionalSetMultimapContentBinding<K, V> will only be used
// for a SetMultimap<K, V>.
while (change.next()) {
final Multiset<E> destination = multisetRef.get();
if (destination == null) {
change.getMultiset().removeListener(this);
} else {
// we use replaceValues() to perform an atomic change here
// (and
// thus don't use the added and removed values from the
// change)
destination.setCount(change.getElement(),
destination.count(change.getElement()),
destination.count(change.getElement())
+ change.getAddCount()
- change.getRemoveCount());
}
}
}
private static void add(List<String> source, Multiset<Ngram> multiset, String field, int slop, List<Integer> template){
Multiset<Ngram> multiSetForDoc = ConcurrentHashMultiset.create();
for (int i=0;i<source.size();i++){
if(i+template.get(template.size()-1)<source.size()){
List<String> list = new ArrayList<>();
for (int j: template){
list.add(source.get(i+j));
}
Ngram ngram = new Ngram();
ngram.setNgram(Ngram.toNgramString(list));
ngram.setSlop(slop);
ngram.setField(field);
ngram.setInOrder(true);
multiSetForDoc.setCount(ngram,1);
}
}
multiset.addAll(multiSetForDoc);
}
@Override
public boolean setCount(E element, int oldCount, int newCount) {
final Multiset<E> multiset = get();
return (multiset == null)
? EMPTY_MULTISET.setCount(element, oldCount, newCount)
: multiset.setCount(element, oldCount, newCount);
}
@Override
public void onChanged(Change<? extends E> change) {
if (!updating) {
final ObservableMultiset<E> multiset1 = multiset1Ref.get();
final ObservableMultiset<E> multiset2 = multiset2Ref.get();
if ((multiset1 == null) || (multiset2 == null)) {
if (multiset1 != null) {
multiset1.removeListener(this);
}
if (multiset2 != null) {
multiset2.removeListener(this);
}
} else {
try {
updating = true;
final Multiset<E> destination = multiset1 == change
.getMultiset() ? multiset2 : multiset1;
// we use replaceValues() to perform an atomic change
// here (and thus don't use the added and removed values
// from the change)
while (change.next()) {
destination.setCount(change.getElement(),
destination.count(change.getElement()),
destination.count(change.getElement())
+ change.getAddCount()
- change.getRemoveCount());
}
} finally {
updating = false;
}
}
}
}
private static PartialCreditTriplet partialCompare(LogicalExpression gold,
LogicalExpression label) {
final Multiset<Pair<? extends LogicalExpression, ? extends LogicalExpression>> goldPairs = GetPredConstPairs
.of(gold);
final Multiset<Pair<? extends LogicalExpression, ? extends LogicalExpression>> labelPairs;
if (label == null) {
labelPairs = HashMultiset.create();
} else {
labelPairs = GetPredConstPairs.of(label);
}
// The "intersection" of the gold and label pair sets = the number of
// matches
final Multiset<Pair<? extends LogicalExpression, ? extends LogicalExpression>> intersection = HashMultiset
.create();
for (final Entry<Pair<? extends LogicalExpression, ? extends LogicalExpression>> entry : goldPairs
.entrySet()) {
intersection.setCount(
entry.getElement(),
Math.min(entry.getCount(),
labelPairs.count(entry.getElement())));
}
return new PartialCreditTriplet(goldPairs.size(), labelPairs.size(),
intersection.size());
}
@Override
public int setCount(E element, int count) {
final Multiset<E> multiset = get();
return (multiset == null) ? EMPTY_MULTISET.setCount(element, count)
: multiset.setCount(element, count);
}
@Test
public void givenMultiSet_whenSetCount_shouldReturnCorrectCount() {
Multiset<String> bookStore = HashMultiset.create();
bookStore.setCount("Potter", 50);
assertThat(bookStore.count("Potter")).isEqualTo(50);
}