2
* Copyright 2014 Goldman Sachs.
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
8
* http://www.apache.org/licenses/LICENSE-2.0
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
17
package com.gs.collections.api.map;
21
import com.gs.collections.api.block.function.Function;
22
import com.gs.collections.api.block.function.Function0;
23
import com.gs.collections.api.block.function.Function2;
24
import com.gs.collections.api.block.function.primitive.BooleanFunction;
25
import com.gs.collections.api.block.function.primitive.ByteFunction;
26
import com.gs.collections.api.block.function.primitive.CharFunction;
27
import com.gs.collections.api.block.function.primitive.DoubleFunction;
28
import com.gs.collections.api.block.function.primitive.FloatFunction;
29
import com.gs.collections.api.block.function.primitive.IntFunction;
30
import com.gs.collections.api.block.function.primitive.LongFunction;
31
import com.gs.collections.api.block.function.primitive.ShortFunction;
32
import com.gs.collections.api.block.predicate.Predicate;
33
import com.gs.collections.api.block.predicate.Predicate2;
34
import com.gs.collections.api.block.procedure.Procedure2;
35
import com.gs.collections.api.collection.ImmutableCollection;
36
import com.gs.collections.api.collection.primitive.ImmutableBooleanCollection;
37
import com.gs.collections.api.collection.primitive.ImmutableByteCollection;
38
import com.gs.collections.api.collection.primitive.ImmutableCharCollection;
39
import com.gs.collections.api.collection.primitive.ImmutableDoubleCollection;
40
import com.gs.collections.api.collection.primitive.ImmutableFloatCollection;
41
import com.gs.collections.api.collection.primitive.ImmutableIntCollection;
42
import com.gs.collections.api.collection.primitive.ImmutableLongCollection;
43
import com.gs.collections.api.collection.primitive.ImmutableShortCollection;
44
import com.gs.collections.api.multimap.ImmutableMultimap;
45
import com.gs.collections.api.multimap.set.ImmutableSetMultimap;
46
import com.gs.collections.api.partition.PartitionImmutableCollection;
47
import com.gs.collections.api.tuple.Pair;
48
import net.jcip.annotations.Immutable;
51
* An ImmutableMap is different than a JCF Map but in that it has no mutating methods. It shares the read-only
52
* protocol of a JDK Map.
55
public interface ImmutableMap<K, V>
56
extends UnsortedMapIterable<K, V>
58
ImmutableMap<K, V> select(Predicate2<? super K, ? super V> predicate);
60
<K2, V2> ImmutableMap<K2, V2> collect(Function2<? super K, ? super V, Pair<K2, V2>> function);
62
<R> ImmutableMap<K, R> collectValues(Function2<? super K, ? super V, ? extends R> function);
64
ImmutableMap<K, V> reject(Predicate2<? super K, ? super V> predicate);
66
Map<K, V> castToMap();
68
ImmutableMap<K, V> newWithKeyValue(K key, V value);
70
ImmutableMap<K, V> newWithAllKeyValues(Iterable<? extends Pair<? extends K, ? extends V>> keyValues);
72
ImmutableMap<K, V> newWithAllKeyValueArguments(Pair<? extends K, ? extends V>... keyValuePairs);
74
ImmutableMap<K, V> newWithoutKey(K key);
76
ImmutableMap<K, V> newWithoutAllKeys(Iterable<? extends K> keys);
78
MutableMap<K, V> toMap();
80
ImmutableSetMultimap<V, K> flip();
82
<R> ImmutableCollection<R> collect(Function<? super V, ? extends R> function);
84
ImmutableBooleanCollection collectBoolean(BooleanFunction<? super V> booleanFunction);
86
ImmutableByteCollection collectByte(ByteFunction<? super V> byteFunction);
88
ImmutableCharCollection collectChar(CharFunction<? super V> charFunction);
90
ImmutableDoubleCollection collectDouble(DoubleFunction<? super V> doubleFunction);
92
ImmutableFloatCollection collectFloat(FloatFunction<? super V> floatFunction);
94
ImmutableIntCollection collectInt(IntFunction<? super V> intFunction);
96
ImmutableLongCollection collectLong(LongFunction<? super V> longFunction);
98
ImmutableShortCollection collectShort(ShortFunction<? super V> shortFunction);
100
<R> ImmutableCollection<R> collectIf(Predicate<? super V> predicate, Function<? super V, ? extends R> function);
102
<R> ImmutableCollection<R> flatCollect(Function<? super V, ? extends Iterable<R>> function);
104
ImmutableCollection<V> select(Predicate<? super V> predicate);
106
ImmutableCollection<V> reject(Predicate<? super V> predicate);
108
PartitionImmutableCollection<V> partition(Predicate<? super V> predicate);
110
<P> PartitionImmutableCollection<V> partitionWith(Predicate2<? super V, ? super P> predicate, P parameter);
112
<S> ImmutableCollection<S> selectInstancesOf(Class<S> clazz);
114
<S> ImmutableCollection<Pair<V, S>> zip(Iterable<S> that);
116
ImmutableCollection<Pair<V, Integer>> zipWithIndex();
118
<VV> ImmutableMultimap<VV, V> groupBy(Function<? super V, ? extends VV> function);
120
<VV> ImmutableMultimap<VV, V> groupByEach(Function<? super V, ? extends Iterable<VV>> function);
122
<V1> ImmutableMap<V1, V> groupByUniqueKey(Function<? super V, ? extends V1> function);
124
<K2, V2> ImmutableMap<K2, V2> aggregateInPlaceBy(
125
Function<? super V, ? extends K2> groupBy,
126
Function0<? extends V2> zeroValueFactory,
127
Procedure2<? super V2, ? super V> mutatingAggregator);
129
<K2, V2> ImmutableMap<K2, V2> aggregateBy(
130
Function<? super V, ? extends K2> groupBy,
131
Function0<? extends V2> zeroValueFactory,
132
Function2<? super V2, ? super V, ? extends V2> nonMutatingAggregator);
134
ImmutableMap<V, K> flipUniqueValues();