All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gs.collections.impl.map.mutable.AbstractMutableMapIterable Maven / Gradle / Ivy

Go to download

GS Collections is a collections framework for Java. It has JDK-compatible List, Set and Map implementations with a rich API and set of utility classes that work with any JDK compatible Collections, Arrays, Maps or Strings. The iteration protocol was inspired by the Smalltalk collection framework.

There is a newer version: 7.0.3
Show newest version
/*
 * Copyright 2015 Goldman Sachs.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.gs.collections.impl.map.mutable;

import java.util.Iterator;

import com.gs.collections.api.RichIterable;
import com.gs.collections.api.block.function.Function;
import com.gs.collections.api.block.function.Function0;
import com.gs.collections.api.block.function.Function2;
import com.gs.collections.api.block.predicate.Predicate2;
import com.gs.collections.api.block.procedure.Procedure2;
import com.gs.collections.api.map.MutableMap;
import com.gs.collections.api.map.MutableMapIterable;
import com.gs.collections.api.tuple.Pair;
import com.gs.collections.impl.block.procedure.MutatingAggregationProcedure;
import com.gs.collections.impl.block.procedure.NonMutatingAggregationProcedure;
import com.gs.collections.impl.map.AbstractMapIterable;
import com.gs.collections.impl.tuple.AbstractImmutableEntry;
import com.gs.collections.impl.utility.LazyIterate;
import com.gs.collections.impl.utility.MapIterate;

public abstract class AbstractMutableMapIterable extends AbstractMapIterable implements MutableMapIterable
{
    public Iterator iterator()
    {
        return this.values().iterator();
    }

    public V getIfAbsentPut(K key, Function0 function)
    {
        V result = this.get(key);
        if (this.isAbsent(result, key))
        {
            result = function.value();
            this.put(key, result);
        }
        return result;
    }

    public V getIfAbsentPut(K key, V value)
    {
        V result = this.get(key);
        if (this.isAbsent(result, key))
        {
            result = value;
            this.put(key, result);
        }
        return result;
    }

    public V getIfAbsentPutWithKey(K key, Function function)
    {
        return this.getIfAbsentPutWith(key, function, key);
    }

    public 

V getIfAbsentPutWith(K key, Function function, P parameter) { V result = this.get(key); if (this.isAbsent(result, key)) { result = function.valueOf(parameter); this.put(key, result); } return result; } public V add(Pair keyValuePair) { return this.put(keyValuePair.getOne(), keyValuePair.getTwo()); } public V updateValue(K key, Function0 factory, Function function) { V oldValue = this.getIfAbsent(key, factory); V newValue = function.valueOf(oldValue); this.put(key, newValue); return newValue; } public

V updateValueWith(K key, Function0 factory, Function2 function, P parameter) { V oldValue = this.getIfAbsent(key, factory); V newValue = function.value(oldValue, parameter); this.put(key, newValue); return newValue; } public MutableMap groupByUniqueKey(Function function) { return this.groupByUniqueKey(function, UnifiedMap.newMap()); } public MutableMap aggregateInPlaceBy( Function groupBy, Function0 zeroValueFactory, Procedure2 mutatingAggregator) { MutableMap map = UnifiedMap.newMap(); this.forEach(new MutatingAggregationProcedure(map, groupBy, zeroValueFactory, mutatingAggregator)); return map; } public MutableMap aggregateBy( Function groupBy, Function0 zeroValueFactory, Function2 nonMutatingAggregator) { MutableMap map = UnifiedMap.newMap(); this.forEach(new NonMutatingAggregationProcedure(map, groupBy, zeroValueFactory, nonMutatingAggregator)); return map; } public RichIterable keysView() { return LazyIterate.adapt(this.keySet()); } public RichIterable valuesView() { return LazyIterate.adapt(this.values()); } public RichIterable> keyValuesView() { return LazyIterate.adapt(this.entrySet()).collect(AbstractImmutableEntry.getPairFunction()); } public MutableMap collect(Function2> function) { return MapIterate.collect(this, function, UnifiedMap.newMap(this.size())); } public MutableMap flipUniqueValues() { return MapIterate.flipUniqueValues(this); } public Pair detect(Predicate2 predicate) { return MapIterate.detect(this, predicate); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy