0

我刚开始使用FunctionalJava 库并想使用不可变的TreeMap。但是,当使用用户定义的类或接口时,我不知道如何创建一个空的开始。

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

所有示例都使用预定义类型,如 Ord.stringOrd。我完全不明白如何创建正确的 Ord<IAddress>。

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

谢谢,德里克

4

2 回答 2

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 顺序对其进行排序。

于 2012-07-17T20:39:40.387 回答
0

如果IAddressimplements Comparable,您也可以使用为它Ord.<IAddress>comparableOrd()构造一个Ord

于 2013-10-20T04:59:21.897 回答