作者:仔仔衰才_887 | 来源:互联网 | 2023-10-15 12:17
canal中很多处使用了MigrateMap.makeComputingMap(Function super K, ? extends V> computingFunction)方法,第一次接触这个方法,刚开始完全不知道在干啥,这个function中的参数的作用是啥,怎么使用,何时触发,之后简单的测试了一下,大致知道了其作用。
package com.company;
import com.google.common.base.Function;
import com.google.common.collect.MigrateMap;
import java.util.concurrent.ConcurrentMap;
/**
* @author chenjunjie
* @since 2018-9-26
*/
public class GoogleColTestMain {
/**
* @param args
*/
public static void main(String[] args) {
// makeComputingMap方法:根据this,创建一个NullComputingConcurrentMap或ComputingConcurrentMap。
ConcurrentMap testMap = MigrateMap.makeComputingMap(new Function() {
/**
* 这里就是绑定的根据key没找到value的时候触发的function,
* 可以将这里的返回值放到对应的key的value中!
* @param arg0
* @return
*/
public String apply(String arg0) {
return "create:" + arg0;
}
});
testMap.put("a", "testa");
testMap.put("b", "testb");
System.out.println(testMap.get("a"));
System.out.println(testMap.get("b"));
System.out.println(testMap.get("c"));
System.out.println(testMap.get("d"));
/**
* 总结:
* 运行结果可以知道,当map再调用get的时候如果根据key值获取不到value时,会触发function,执行apply方法。
*/
}
}
测试结果:
"D:\Program Files\Java\jdk1.8.0_181\bin\java.exe" ...
testa
testb
create:c
create:d
Process finished with exit code 0
从运行结果可以知道,当map再调用get的时候如果根据key值获取不到value时,会触发function,执行apply方法,并获取apply返回的值。
Guava Cache -- MapMaker.makeComputingMap测试