zoukankan      html  css  js  c++  java
  • 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}
    {1=org.rui.collection2.map.Pair@170bea5, 2=org.rui.collection2.map.Pair@f47396, 3=org.rui.collection2.map.Pair@d0af9b, 4=org.rui.collection2.map.Pair@b8f8eb, 5=org.rui.collection2.map.Pair@1de17f4, 6=org.rui.collection2.map.Pair@1f6ba0f, 7=org.rui.collection2.map.Pair@1313906, 8=org.rui.collection2.map.Pair@96cf11}
    {a=value, b=value, c=value, d=value, e=value}
    */
    


  • 相关阅读:
    [K/3Cloud] 首页增加一个自定义页签及页面内容
    [K/3Cloud]DBServiceHelper.ExecuteDataSet(this.Context, sql)) 返回数据问题
    [K/3Cloud] 表单python脚本使用QueryService的做法
    [K/3Cloud]有关单据显示行数限制和数据导出的建议
    [K/3Cloud]实现双击列表行后显示具体的某个单据明细。
    [K/3Cloud]K3Cloud的移动审批方面
    [K/3Cloud]K3Cloud的移动审批方面
    [K/3Cloud]关于数据库sa密码更改,管理中心登录不上的问题。
    游戏编程最前沿....
    marmalade android 5.0 JNI 调用失败的解决方案
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3791461.html
Copyright © 2011-2022 走看看