2016-11-28 8 views
3

私はストリームと他の多くの基本的なもので中間とターミナル機能を利用する方法を知っています。 しかし、私が与えられた課題は、私が実装するのが混乱しています。私は最後の36時間ノンストップのために苦労してきました。 私の割り当ては以下の通りです:私はJavaストリームのジェネリックスに苦労しています

は、注文それを、それをフィルタリング、List<T>を取る値のみ一定の金額を返し、値の一定量をスキップして適用する機能的な方法の1つの静的メソッドを実装それに関数をマッピングする。戻り値はList<R>とする。 TおよびRは、不特定ジェネリック型である。必要な値はすべてパラメータになります。制限とオフセットはオプションでなければならない。 JUnitを使用してメソッドをテストします。

これまでのところ、私はコードを書くことしかできませんでした。私は最初のステップのフィルタに固執しています。混乱は、私はそれをフィルタリングすることができますどのような種類のリストを知らない場合。

public class GeneralMethods<T,R> { 

    private List<T> recList; 
    private List<R> retList; 

    public void manipulateList(){ 
     retList = recList.stream().filter(s -> s.) 
    } 
} 

これは私の割り当てです。私は苦労しました。私はあなたの助けに感謝します。

+3

'述語'を 'manipulateList'に渡し、それを使って入力リストをフィルタリングします。 – Eran

+3

まず、静的な*メソッドを作成することになっています。代わりに、ステートベースの非静的メソッドを作成しました。パラメータはありません。私はあなたが正しい署名を書くことを提案し、残りはより簡単になります。 – RealSkeptic

+1

'static'メソッドについての混乱に加えて、フィルタ関数を書く必要がないことを理解するのは難しいようです。あなたのメソッドの呼び出し側が行います。適切な 'Predicate'パラメータを受け入れ、それをストリームに渡すだけです。 – Holger

答えて

2

あなたの1つのライナーは、あなたがfilterPredicate、comparatorT、およびmapTtoRパラメータの実装を提供する必要がありますJUnitのに続いて

public class GeneralMethods<T,R> { 

    public List<R> manipulateList(List<T> recList, 
            Predicate<T> filterPredicate, 
            Comparator<T> comparatorT, 
            Function<T,R> mapTtoR, 
            long ... limitAndOffset){ 

     return recList.stream() 
         .filter(filterPredicate) 
         .sorted(comparatorT) 
         .skip(limitAndOffset.length > 1 ? limitAndOffset[1] : 0) 
         .limit(limitAndOffset.length > 0 ? limitAndOffset[0] : Long.MAX_VALUE) 
         .map(mapTtoR) 
         .collect(toList()); 
    } 

} 

ようになるはずです。

+4

'static'メソッドを作成する必要があることに気付きましたか?また、あなたは、後ろに続く 'int'引数をいくつでも使うことができるメソッドを提供しています。私は、先生はそれを好きではないと思う。 – Holger

+0

うん、さらに多くのJava 8の機能的アプローチは、{ \t戻りrecList.streamパブリック静的リスト manipulateList(機能 mapTtoR、オプション限界、オプションオフセットリスト recList、述語 filterPredicate、コンパレータ comparatorT)であろう.filter(filterPredicate).sorted(comparatorT).skip(offset.orElse(0l))。limit(limit.orElse(Long.MAX_VALUE))。map(mapTtoR).collect(toList()); } –

+1

あなたの答えに入れてください。あなたが知っている、あなたはそれを編集することができます。 – Holger