blob: abae4240d51f6bc6e44924c29a2f023cc91a2a33 [file] [log] [blame]
// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.utils;
import com.android.tools.r8.utils.StringUtils.BraceType;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.IntFunction;
public class MapUtils {
public static <K, V> K firstKey(Map<K, V> map) {
return map.keySet().iterator().next();
}
public static <K, V> V firstValue(Map<K, V> map) {
return map.values().iterator().next();
}
public static <K, V> Map<K, V> map(
Map<K, V> map,
IntFunction<Map<K, V>> factory,
Function<K, K> keyMapping,
Function<V, V> valueMapping,
BiFunction<V, V, V> valueMerger) {
Map<K, V> result = factory.apply(map.size());
map.forEach(
(key, value) -> {
K newKey = keyMapping.apply(key);
V newValue = valueMapping.apply(value);
V existingValue = result.put(newKey, newValue);
if (existingValue != null) {
result.put(newKey, valueMerger.apply(existingValue, newValue));
}
});
return result;
}
public static <T> void removeIdentityMappings(Map<T, T> map) {
map.entrySet().removeIf(entry -> entry.getKey() == entry.getValue());
}
public static String toString(Map<?, ?> map) {
return StringUtils.join(
",", map.entrySet(), entry -> entry.getKey() + ":" + entry.getValue(), BraceType.TUBORG);
}
}