-
Notifications
You must be signed in to change notification settings - Fork 587
/
MutableBagIterable.java
130 lines (103 loc) · 4.25 KB
/
MutableBagIterable.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* Copyright (c) 2018 Goldman Sachs.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompany this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package org.eclipse.collections.api.bag;
import org.eclipse.collections.api.RichIterable;
import org.eclipse.collections.api.block.function.Function;
import org.eclipse.collections.api.block.function.primitive.ObjectIntToObjectFunction;
import org.eclipse.collections.api.block.predicate.Predicate;
import org.eclipse.collections.api.block.predicate.Predicate2;
import org.eclipse.collections.api.block.predicate.primitive.IntPredicate;
import org.eclipse.collections.api.block.procedure.Procedure;
import org.eclipse.collections.api.collection.MutableCollection;
import org.eclipse.collections.api.list.MutableList;
import org.eclipse.collections.api.map.MutableMapIterable;
import org.eclipse.collections.api.multimap.bag.MutableBagIterableMultimap;
import org.eclipse.collections.api.partition.bag.PartitionMutableBagIterable;
import org.eclipse.collections.api.set.MutableSetIterable;
import org.eclipse.collections.api.tuple.Pair;
import org.eclipse.collections.api.tuple.primitive.ObjectIntPair;
public interface MutableBagIterable<T> extends Bag<T>, MutableCollection<T>
{
/**
* Add number of {@code occurrences} for an {@code item}. If the {@code item} does not exist, then the {@code item} is added to the bag.
*
* <p>
* For Example:
* <pre>
* MutableBagIterable<String> names = Bags.mutable.of("A", "B", "B");
* Assert.assertEquals(4, names.<b>addOccurrences</b>("A", 3));
* </pre>
*
* @return updated number of occurrences.
* @throws IllegalArgumentException if {@code occurrences} are less than 0.
*/
int addOccurrences(T item, int occurrences);
boolean removeOccurrences(Object item, int occurrences);
boolean setOccurrences(T item, int occurrences);
@Override
MutableBagIterable<T> tap(Procedure<? super T> procedure);
@Override
MutableBagIterable<T> select(Predicate<? super T> predicate);
@Override
<P> MutableBagIterable<T> selectWith(Predicate2<? super T, ? super P> predicate, P parameter);
@Override
MutableBagIterable<T> reject(Predicate<? super T> predicate);
@Override
<P> MutableBagIterable<T> rejectWith(Predicate2<? super T, ? super P> predicate, P parameter);
@Override
PartitionMutableBagIterable<T> partition(Predicate<? super T> predicate);
@Override
<P> PartitionMutableBagIterable<T> partitionWith(Predicate2<? super T, ? super P> predicate, P parameter);
@Override
<S> MutableBagIterable<S> selectInstancesOf(Class<S> clazz);
@Override
<V> MutableBagIterableMultimap<V, T> groupBy(Function<? super T, ? extends V> function);
@Override
<V> MutableBagIterableMultimap<V, T> groupByEach(Function<? super T, ? extends Iterable<V>> function);
@Override
MutableSetIterable<Pair<T, Integer>> zipWithIndex();
@Override
MutableBagIterable<T> selectByOccurrences(IntPredicate predicate);
/**
* @since 9.2
*/
@Override
default MutableBagIterable<T> selectDuplicates()
{
return this.selectByOccurrences(occurrences -> occurrences > 1);
}
/**
* @since 9.2
*/
@Override
MutableSetIterable<T> selectUnique();
@Override
MutableMapIterable<T, Integer> toMapOfItemToCount();
/**
* @since 6.0
*/
@Override
MutableList<ObjectIntPair<T>> topOccurrences(int count);
/**
* @since 6.0
*/
@Override
MutableList<ObjectIntPair<T>> bottomOccurrences(int count);
@Override
MutableBagIterable<T> with(T element);
@Override
MutableBagIterable<T> without(T element);
@Override
MutableBagIterable<T> withAll(Iterable<? extends T> elements);
@Override
MutableBagIterable<T> withoutAll(Iterable<? extends T> elements);
@Override
<V> RichIterable<V> collectWithOccurrences(ObjectIntToObjectFunction<? super T, ? extends V> function);
}