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(city、street、number)があるとすると、次のようになります。

// 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の順序で並べ替えることを意味します。

于 2012-07-17T20:39:40.387 に答える
0

IAddressを実装する場合はComparable、 を使用して forOrd.<IAddress>comparableOrd()を構築することもできますOrd

于 2013-10-20T04:59:21.897 に答える