67,512
社区成员
发帖
与我相关
我的任务
分享
package pers.jassor.util.face;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Consumer;
/**
* 简单方便的Map函数式接口,使用get静态方法获取最终的Map
* 回调函数中的参数可以连续put值
* @author Jassor
*
* @param <K> 键的类型
* @param <V> 值的类型
*/
public interface MapPut<K, V>{
/*
* 一个简单地使用例子:
* Map map = MapPut.get((mp)->mp.put("a", "b").put("c", "d"));
* 得到的map中已经储存了两组键值对
*
*/
public void putImpl(K key, V value);
public default MapPut<K,V> put(K key, V value) {
putImpl(key, value);
return this;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Map getHash(Consumer<MapPut> mp) {
Map map = new HashMap();
mp.accept(map::put);
return map;
}
}
@Test
public void testMap() {
System.out.println(
(
(
(MapEnd)
()->{
Map map = new HashMap();
MapPut mp = (k, v)->map.put(k, v);;
mp.put("a", "b");
return map;
}
).end()
).get("a")
);
}
@FunctionalInterface
interface MapPut<M, K, V>{
public void putImpl(K key, V value);
public default MapPut<M, K,V> put(K key, V value) {
putImpl(key, value);
return this;
}
}
@FunctionalInterface
interface MapEnd {
public Map end();
}
中间的mp可以实现连续打点存值。