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} */