我刚刚开始使用FunctionalJava库,并想使用不可变的TreeMap。但是,我无法弄清楚如何使用用户定义的类或接口创建一个空的开始。
fj.data.TreeMap<IAddress, Optional<ScanNode>> nodes = TreeMap.empty(Ord<IAddress>);
所有示例都使用预定义的类型,例如Ord.stringOrd。我完全不了解如何创建正确的Ord 。
有人可以解释如何做到这一点吗?
谢谢,德里克
最佳答案
本质上,树图必须对其元素进行某种排序,因此您必须描述如何对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);
}
协同映射意味着它首先将函数应用于IAddress上的P3,取回P3,然后以给定的P3顺序对其进行排序。