【讨论帖】map的函数式编程

谁用了我的英文名 2016-01-10 03:00:33
请原谅我眼拙,没有发现Map相关的拉姆达表达式相关配件,所以自己写了一套接口:

@Test
public void testMap() {
System.out.println(MapPut.end((mp)->{mp.put("a", "b").put("c", "d");}).get("a"));
}


@FunctionalInterface
interface MapPut<K, V>{

public void putImpl(K key, V value);

public default MapPut<K,V> put(K key, V value) {
putImpl(key, value);
return this;
}

@SuppressWarnings({ "rawtypes", "rawtypes", "unchecked" })
public static Map end(MapBack mb) {
Map map = new HashMap();
mb.back((k, v)->map.put(k, v));
return map;
}
}

@FunctionalInterface
interface MapBack {

public void back(MapPut mp);

}


见上,通过两个函数式接口,就可以实现不定义Map变量而连续打点赋值的语法啦!~
...全文
99 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
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;
	}
}

50,544

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧