2017-11-12 6 views
-3

私はここで助けが切望されています。私はこの既存のコードをジェネリックスに移行することにしており、実際に壁に当たっています。どんな助けでも大歓迎です。このコードをGenericsに変換するにはどうすればよいですか?

既存のコードはアルゴリズムライブラリであり、車両のコンストラクタ(つまりBike.Java)を持つクラスがいくつか付いています。

私はさまざまなことを試しましたが、わかりません。私はいくつかの洞察力が大好きです。 Javaの8以来

public class Algo 
{ 
    /** 
    * Copies all objects from src to tgt, for which the predicate pred holds. 
    * 
    * @param src source list 
    * @param tgt target list 
    * @param pred unary predicate 
    */ 
    static public 
    void copyIf(List src, List tgt, UnaryPredicate pred) 
    { 
    for (Object obj : src) 
    { 
     if (pred.test(obj)) tgt.add(obj); 
    } 
    } 

/** 
    * Copies all objects from src to tgt that are greater than yardstick. 
    * 
    * @param src source 
    * @param tgt target 
    * @param yardstick determines if objects in src should be copied to tgt. 
    */ 
    static public 
    void copyIfGreaterThan(List src, List tgt, final Comparable yardstick) 
    { 
    copyIf(src, tgt, new UnaryPredicate() { 
     public boolean test(Object o) 
     { 
     return yardstick.compareTo(o) < 0; 
     } 
    }); 
    } 

    /** 
    * Finds a maximum object in lst. 
    * 
    * @param lst a list containing non-null references 
    * @return a maximum object in lst 
    */ 
    static public 
    Comparable findMax(List lst) 
    { 
    assert lst != null; 

    Comparable max = null; 
    Iterator iter = lst.iterator(); 

    // handle first element 
    if (iter.hasNext()) 
     max = (Comparable) iter.next(); 

    // handle remaining elements 
    while (iter.hasNext()) 
    { 
     assert max != null; 

     Comparable cand = (Comparable) iter.next(); 

     if (max.compareTo(cand) < 0) 
     max = cand; 
    } 

    return max; 
    } 

    /** 
    * Adds the smaller of lhs and rhs to dst. 
    * 
    * @param lhs left hand side object 
    * @param rhs right hand side object 
    * @param dst destination list 
    */ 
    static public 
    void storeMin(Comparable lhs, Comparable rhs, List dst) 
    { 
    Comparable min = lhs; 

    if (min.compareTo(rhs) > 0) min = rhs; 

    dst.add(min); 
    } 

    /** 
    * swaps the elements at a and b in lst. 
    * 
    * @param lst a list 
    * @param a first location in lst 
    * @param b second location in lst 
    */ 
    static private 
    void swap(ArrayList objs, int a, int b) 
    { 
    Object tmp = objs.get(a); 

    objs.set(a, objs.get(b)); 
    objs.set(b, tmp); 
    } 

    /** 
    * Sorts the elements in lst. 
    * 
    * @param lst an array list containing non-null references 
    */ 
    static public 
    void selectionSort(ArrayList lst) 
    { 
    for (int i = 0; i < lst.size(); ++i) 
    { 
     int  min = i; 
     Comparable minobj = (Comparable) lst.get(min); 

     for (int j = i+1; j < lst.size(); ++j) 
     { 
     if (minobj.compareTo(lst.get(j)) > 0) 
     { 
      min = j; 
      minobj = (Comparable) lst.get(min); 
     } 
     } 

     swap(lst, min, i); 
    } 
    } 
} 
+1

*私はさまざまなことをたくさん試しました。* –

+0

コードを表示せずにバグについて質問しているので、私はこの質問をd​​ownvotedしています。具体的なコードがなければ、問題は何かを推測することしかできません。これはあなたや将来の読者には役に立たないものです。問題の[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を表示するために質問を編集することができれば、このdownvoteは取り消されるかもしれません。 –

+0

まず、すべてのコンパイラの警告を有効にします。それでは、特に「生のタイプ」について注意してください。 – VGR

答えて

-2

あなたはそのようにそれを行うことができます:ジェネリック医薬品についての詳細に関する情報については

public static <T> List<T> copyIf(List<T> src, Predicate<T> predicate){ 
    return src.stream().filter(predicate).collect(Collectors.toList()); 
} 

public static <T> List<T> copyIfGreaterThan(List<T> src, Comparable<T> yardstick) { 
    return copyIf(src, t -> (yardstick.compareTo(t) < 0)); 
} 

を参照してください。ストリームの詳細に関する情報については https://docs.oracle.com/javase/tutorial/java/generics/types.html

は、例えば参照 https://www.tutorialspoint.com/java8/java8_streams.htm

+0

説明のないコード・ダンプは良い答えではありません。 – VGR

+0

そんなに助けてくれました!私はその部分を理解することができました。私は疑問があります:ジェネリックコードのテスターを実装しなければなりませんでしたが、新しい汎用コードでは動作しない事例のいくつかの例を持つ元のコード用のテスターも実装しました。これらのことがどういうものかを私に例えて教えてください。彼らはすべて働いているのは分かりませんか?私はそれが理にかなったことを望む。 – ColeTheNotSoGreat

+0

上記のコードのテスターは、キャスティングを使用して行うことができますが、正しく理解すれば私はshureではありません。あなたの最初の例のためのいくつかのテストコードが欲しいですか? – IEE1394

関連する問題