DataList.java
和同学讨论传递Function是否可以解耦写的代码,QQ讨论时没语法高亮就放博客了,一直忘删了。
[java]</pre>
<pre>package datalist2;
import java.util.ArrayList;
import java.util.function.Function;
/**
 * 数据列表,有三列
 * @param <X>
 * @param <Y>
 * @param <Z>
 */
public class DataList<X,Y,Z> {
    private ArrayList<ThreeD<X,Y,Z>>list=new ArrayList<>();
    /**
     * 增加一行
     * @param threeD
     */
    public void add(ThreeD<X,Y,Z> threeD){
        list.add(threeD);
    }
    /**
     * 三列迭代器实现的可复用代码
     * @param <E>
     */
    private abstract class Iter<E> implements Iterator<E> {
        int i=-1;
        public abstract E next();
        public boolean hasNext() {
            return i<list.size()-1;
        }
    }
    public <E> Iterator getIterator(Function<ThreeD,E> columnGetter){
        Iter iter=new Iter<E>(){
            @Override
            public E next() {
                i++;
                return columnGetter.apply(list.get(i));
            }
        };
        return iter;
    }
    public static void main(String[] args) {
        //GDP排名列表
        DataList<Integer,String,Double> GDPRank=new DataList<Integer,String,Double>();
        GDPRank.add(new ThreeD<>(1,"美国",9710.25));
        GDPRank.add(new ThreeD<>(2,"日本",8000.00));
        GDPRank.add(new ThreeD<>(3,"中国",3150.90));
        //列出表中所有国家名
        Iterator iterator=GDPRank.getIterator(ThreeD::getY);
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
        /**
         *
         * Output:
         美国
         日本
         中国
         */
    }
}
/**
 * 三维元组
 * @param <X>
 * @param <Y>
 * @param <Z>
 */
class ThreeD<X,Y,Z> {
    private final X x;
    private final Y y;
    private final Z z;
    public ThreeD(X x,Y y,Z z){
        this.x=x;
        this.y=y;
        this.z=z;
    }
    public X getX() {
        return x;
    }
    public Y getY() {
        return y;
    }
    public Z getZ() {
        return z;
    }
}
/**
 * 通用迭代器
 * @param <E>
 */
interface Iterator<E> {
    E next();
    boolean hasNext();
}
</pre>
<pre>
[/java]
共有 0 条评论