Map生成器 map适配器现在可以使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象

Map生成器 map适配器现在可以使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象

package org.rui.collection2.map;
/**
 * map生成器
 * @author lenovo
 *
 */
public class Pair<K,V> {
	public final K key;
	public final V value;
	public Pair(K k,V v)
	{
		this.key=k;
		this.value=v;
	}
}

//Generator.java
package org.rui.generics.anonymity;

public interface Generator<T> {

	//返回泛型的内型对象
    T next();

}
package org.rui.collection2.map;
import java.util.Iterator;
import java.util.LinkedHashMap;

import org.rui.generics.anonymity.Generator;
/**
 * map 适配器现在可以使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象
 * @author lenovo
 *
 * @param <K>
 * @param <V>
 */

public class MapData<K,V> extends LinkedHashMap<K,V>
{

	public MapData(Generator<Pair<K,V>> gen,int quantity)
	{
		for(int i=0;i<quantity;i++)
		{
			Pair<K,V> p=gen.next();
			put(p.key,p.value);
		}
	}
	///////////////////////////////////////////////////////////
	public MapData(Generator<K> genK,Generator<V> genV,int quantity)
	{
		for(int i=0;i<quantity;i++)
		{
			put(genK.next(),genV.next());
		}
	}
	//////////A key Generator and a single value/////////////////////////////////////////////////
	public MapData(Generator<K> genK,V genV,int quantity)
	{
		for(int i=0;i<quantity;i++)
		{
		  put(genK.next(),genV);
		}
	}
	///////////an iterable and a value generator////////////////////////////////////////////////
	public MapData(Iterable<K> genK,Generator<V> genV)
	{
		for(K k : genK)
		{
		  put(k,genV.next());
		}
	}
	///////////an iterable and a single value////////////////////////////////////////////////
	public MapData(Iterable<K> genK,V v)
	{
		for(K k : genK)
		{
		//System.out.println(k);
		  put(k,v);
		}
	}
/////////////generic convenience methods///////////////////////////////////////////

	public static<K,V> MapData<K,V> map(Generator<Pair<K,V>> gen,int quantity)
	{
		return new MapData<K,V>(gen,quantity);
	}
	public static<K,V> MapData<K,V> map(Generator<K> gen,Generator<V> genV,int quantity)
	{
		return new MapData<K,V>(gen,genV,quantity);
	}
	public static<K,V> MapData<K,V> map(Generator<K> gen,V v,int quantity)
	{
		return new MapData<K,V>(gen,v,quantity);
	}
	public static<K,V> MapData<K,V> map(Iterable<K> k,Generator<V> v)
	{
		return new MapData<K,V>(k,v);
	}
	public static<K,V> MapData<K,V> map(Iterable<K> k,V v)
	{
		return new MapData<K,V>(k,v);
	}
}
package org.rui.collection2.map;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.rui.generics.anonymity.Generator;

/**
 * 下面是一个使用MapData的示例,LettersGenerator
 * 通过产生一个Iterator还实现了Iterable,通过这种方式,
 * 它可以被用来测试MapData.map()方法,而这些方法都需要用到iterable
 * @author lenovo
 *
 */

class Letters implements Generator<Pair<Integer,String>>,Iterable<Integer>
{

	private int size=9;
	private int number=1;
	private char letter='a';

	@Override
	public Pair<Integer, String> next() {
		return new Pair<Integer,String>(number++,""+letter++);
	}

	@Override
	public Iterator<Integer> iterator() {
		return new Iterator<Integer>()
		{
			public Integer next() {return number++;}
			public boolean hasNext(){return number<size;}
			public void remove()
			{
				throw new UnsupportedOperationException();
			}
		};
	}
}

public class MapDataTest {
	public static void main(String[] args)
	{
		Character[] chars={'a','b','c','d','e'};

	   List<Character> list = Arrays.asList(chars);
	  System.out.println(MapData.map(new Letters(),11));
	  System.out.println(MapData.map(new Letters(),"pop"));
	  System.out.println(MapData.map(new Letters(),new Letters()));
	  System.out.println(MapData.map(list,"value"));

	}
}
/**output:
{1=a, 2=b, 3=c, 4=d, 5=e, 6=f, 7=g, 8=h, 9=i, 10=j, 11=k}
{1=pop, 2=pop, 3=pop, 4=pop, 5=pop, 6=pop, 7=pop, 8=pop}
{[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]}
{a=value, b=value, c=value, d=value, e=value}
*/

Map生成器 map适配器现在可以使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象

时间: 2024-11-01 17:24:56

Map生成器 map适配器现在可以使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象的相关文章

Map生成器 map适配器如今能够使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象

Map生成器 map适配器如今能够使用各种不同的Generator,iterator和常量值的组合来填充Map初始化对象 package org.rui.collection2.map; /** * map生成器 * @author lenovo * */ public class Pair<K,V> { public final K key; public final V value; public Pair(K k,V v) { this.key=k; this.value=v; } }

从头认识java-15.1 填充容器(3)-填充Map

这一章节我们来讨论一下填充容器的还有一个方面Map.之前的两个章节我们都是用list来作为容器.这一章节我们使用Map. 还有在这里解释一下为什么一直都使用生成器这个东西,事实上他就是建造者设计模式,它基本的作用就是生产复杂的对象,并且满足各种需求的变化(灵活性). 还有为什么花这么多章节来讨论填充容器,主要由于填充容器包含比較多的知识点,知识点列举: (1)泛型 (2)建造者设计模式 (3)容器的填充方法(list 的add.map的put等) 进入主题,我们来讨论一下Map的填充 1.样例

.map文件的作用以及在chorme下会报错找不到jquery-1.10.2.min.map文件,404 的原因

source map文件是js文件压缩后,文件的变量名替换对应.变量所在位置等元信息数据文件,一般这种文件和min.js主文件放在同一个目录下. 比如压缩后原变量是map,压缩后通过变量替换规则可能会被替换成a,这时source map文件会记录下这个mapping的信息,这样的好处就是说,在调试的时候,如果有一些JS报错,那么浏览器会通过解析这个map文件来重新merge压缩后的js,使开发者可以用未压缩前的代码来调试,这样会给我们带来很大的方便! 而这种还原性调试功能,目前只有chorme才

集合练习 练习:每一个学生Student都有一个对应的归属地定义为String类型。学生属性:姓名,年龄 注意:姓名和年龄相同的视为同一个学生。保证学生的唯一性。 1、描述学生。 2、定义Map容器,将学生作为键,地址作为值存入集合中。 3、获取Map中的元素并进行排序。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Monaco } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Monaco; min-height: 30.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Monaco; color: #931a68 } p.p4 { margin: 0.0px 0.0px 0

简单组合java.util.Map&lt;K,V&gt;实现Map&lt;K,P,V&gt;

java.util.Map<K,V>为单键对单值,有时需要双键对单值,因此基于Map<K,V>可以简单实现一个Map<K,P,V>. 接口定义:下载 Java代码 package cc.lixiaohui.demo.javassist.proxy.util; import java.util.Collection; import java.util.Set; /** * 两个键的复合map * <pre> * key------+ *          |-

es6笔记5^_^set、map、iterator

一.set 1.基本用法 数据结构Set类似于数组,但是成员的值都是唯一的,没有重复的值. let s = new Set(); [2,3,5,4,5,2,2].map(x => s.add(x)) for (let i of s) {console.log(i)}// 2 3 5 4 //Set函数可以接受一个数组作为参数,用来初始化. var items = new Set([1,2,3,4,5,5,5,5]); console.log(items); // set object conso

C++中map的一点疑惑...

int CRuntimePara::getInt(const string& strKey,int iDefault){ map<string,string>::const_iterator iter; if ((iter = _mapParaValue.find(strKey)) != _mapParaValue.end()) return atoi((*iter).second.c_str()); else return iDefault;} _mapParaValue.end()

【深入理解Java虚拟机】类的初始化过程

类的初始化过程 类的加载过程.png 加载 将 Class 文件以二进制的形式加载到内存中 验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的默认值,比如int初始化为0,reference初始化为null) 但是达到类的初始化之前都没有初始化为真正的值. 零值.png 解析 将符号引用转换为直接引用 初始化 搜集并执行static代码块,以及 方法的执行, 是静态变量以及static 代码块组成 使用 为新对象申请内存, 为示例变量初始

c++ 提高4 map容器 共性机制 使用时机 比较| STL算法 算法基础仿函数 谓词 函数适配器 遍历算法

[本文谢绝转载] <大纲> STL 容器 map 容器的4中初始化 遍历 map容器 元素的删除观测map.insert返回值,方法123,已存在就报错,初始化方法4会覆盖 map的查找,异常处理 map容器的range返回两个迭代器 multimap案例,按照部门_增删员工信息 容器共性机制 把对象放到容器中,会自动执行拷贝构造函数 各个容器的使用时机 vector与deque的比较: 算法 算法基础 函数对象(仿函数) 函数对象 与普通函数的区别:--  相同之处 函数对象 与普通函数的区