如何构建FunctionalJava TreeMap?

时间:2012-07-17 14:56:53

标签: java functional-programming treemap functional-java

我刚刚开始使用FunctionalJava库并希望使用不可变的TreeMap。但是,在使用用户定义的类或接口时,我无法弄清楚如何创建一个空的。

fj.data.TreeMap<IAddress, Optional<ScanNode>> nodes = TreeMap.empty(Ord<IAddress>);

所有示例都使用预定义类型,如Ord.stringOrd。我完全不了解如何创建正确的Ord&lt; IAddress&gt;。

有人可以解释一下如何做到这一点吗?

谢谢,德里克

2 个答案:

答案 0 :(得分:3)

基本上树形图必须对其元素进行某种排序,因此您必须描述如何订购IAddress。

例如,假设IAddress有2个字符串和一个int(城市,街道,数字),您可以执行以下操作:

// translate an IAddress to a P3 containing the important data
F<IAddress, P3<String, String, Integer>> toP3 = new F<...> () {
        P3<String, String, Integer> f(IAddress addr) { 
              return P.p(addr.getCity(), addr.getStreet(), addr.getNumber());
}

main () {
    // first map IAddress to a P3 using the function above, then simply order it by its fields
    Ord<IAddress> addrOrd = Ord.P3Ord(Ord.StringOrd, Ord.StringOrd, Ord.IntOrd).comap(toP3);

    fj.data.TreeMap<IAddress, Optional<ScanNode>> nodes = TreeMap.empty(addrOrd);
}

co-mapping意味着它首先在IAddress上应用函数toP3,返回P3,然后用给定的P3顺序对它进行排序。

答案 1 :(得分:0)

如果IAddress实施Comparable,您还可以使用Ord.<IAddress>comparableOrd()为其构建Ord