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初始化对象

时间: 2025-01-15 15:36: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.样例

简单组合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------+ *          |-

ContentProvider &amp; ContentResolver

实现contentresolver 结合手机的联系人来完成一个简单的联系人管理的工具demo 实现contentresolver 结合手机的联系人来完成一个简单的联系人管理的工具demo */ public class MainActivity extends Activity { // 获取联系人 // 首先需要的是联系人的CotentProvider的Uri:这些是系统提供给开发者的 // Uri uri_contacts = ContactsContract.Contacts.CONTEN

Java 操作 JSON

import java.util.*; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.util.CycleDetectionStrategy; import org.apache.commons.lang.StringUtils; public class JsonUtil { /** * 从一个JSON 对象字符格式中得

数据结构( Pyhon 语言描述 ) &mdash; &mdash;第11章:集和字典

使用集 集是没有特定顺序的项的一个集合,集中的项中唯一的 集上可以执行的操作 返回集中项的数目 测试集是否为空 向集中添加一项 从集中删除一项 测试给定的项是否在集中 获取两个集的并集 获取两个集的交集 获取两个集的差集 判断一个集是否是另一个集的子集 集上的差集和子集操作是不对称的 Python 中的 set 类 set 类中常用的方法 使用示例 >>> A = set([0,1,2]) >>> B = set() >>> 1 in A True &

深入了解Generator

要理解generator,我们先从迭代(iteration)与迭代器(iterator)讲起.当然,本文的重点是generator,iteration与iterator的知识将点到即止 迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次"迭代",而每一次迭代得到的结果会被用来作为下一次迭代的初始值. 以上是维基百科对迭代的定义.在python中,迭代通常是通过for ... in ...来完成的,而且只要是可迭代对象(iterable),

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

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

Map&lt;String, String&gt;的数据处理以及ListView的适配器

Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); //第一种:普遍使用,二次取值 System.out.println("通过Ma