Guava的Maps.transformEntries方法

333 阅读1分钟

Guava:guava.dev/

在Guava库中,Maps.transformEntries(Map<K, V1>, Maps.EntryTransformer<? super K, ? super V1, V2>) 是一个用于转换Map中每个条目的方法。它接受一个输入Map和一个EntryTransformer函数,并返回一个新的Map,其中的每个条目都经过函数转换。

方法的参数:

  • Map<K, V1>:这是你要进行转换的输入Map,其中K表示键的类型,V1表示值的类型。
  • Maps.EntryTransformer<? super K, ? super V1, V2>:这是一个接口类型,它定义了一个方法,用于将输入Map的键值对(类型为K和V1)转换成输出Map的键值对(类型为V2)。这个函数将接收键和值,然后返回一个新的值(类型为V2)。

方法的作用是遍历输入Map的每个键值对,将其传递给EntryTransformer函数,并将函数的返回值作为新Map的值,键保持不变。最终,返回一个新的Map,其中每个条目都经过了转换。

这个方法可以用于各种情况,例如,当你想要修改Map中的值、重新格式化数据(日志脱敏),或者进行其他自定义转换时,它非常有用。通过提供一个自定义的EntryTransformer函数,可以实现灵活的转换逻辑。

举例子

import com.google.common.collect.Maps;
import java.util.Map;

public class GuavaMapsTransformEntriesExample {

    public static void main(String[] args) {
        // 创建一个输入Map
        Map<Integer, String> inputMap = Maps.newHashMap();
        inputMap.put(1, "Apple");
        inputMap.put(2, "Banana");
        inputMap.put(3, "Cherry");

        // 使用EntryTransformer函数将值转为大写
        Map<Integer, String> transformedMap = Maps.transformEntries(inputMap, new UppercaseValueTransformer());

        // 打印转换后的Map
        System.out.println("Original Map: " + inputMap);
        System.out.println("Transformed Map: " + transformedMap);
    }

    // 自定义的EntryTransformer函数,将值转为大写
    static class UppercaseValueTransformer implements Maps.EntryTransformer<Integer, String, String> {
        @Override
        public String transformEntry(Integer key, String value) {
            // 在这里进行值的转换,将字符串转为大写
            return value.toUpperCase();
        }
    }
}

image.png