2
ワイルドカードを引数に持つコンパレータを受け入れるメソッドを作成し、そのクラスを取得してコンパレータを使用する方法はありますか?コンパイラをLambdaを使用するメソッドの引数として渡してキャストする
public List<String> myFilter(Comparator<?> comp, Object value, Class c){
return myList.stream()
.filter(s->
comp.compare(c.cast(s), c.cast(value))>=0
).collect(toList());
}
EDIT: [OK]を、実際には、アンドリューの答えは非常に興味深いですし、非常にうまく動作します:) しかし、コメントが与えられ、私が本当に欲しいすべきことは次のとおりです。代わりにメソッド内でキャストしようと、期待しますキャストはすでにので、これは与えるだろう、コンパレータ内
を行われていたこと:
public List<String> filter(Comparator<String> comp){
return myList.filter(s->comp.compare(s, null)>=0).collect(toList());
}
をし、それを呼び出すときに、これは
のようなものでなければなりませんList<String> myNewList= filter((String s1, String s2)->{
try{
int i=Integer.parseInt(s1);
return Integer.compare(i, myRealCompareValue);
}catch(Exception e){
e.printStackTrace();
return null;
});
それはしかし非常に素晴らしい見ていない....実際に
何 'myList'の種類があり、どのようにそれが宣言されていますか? – assylias
できません。コンパレータが正しく入力されているか、チェックされていない状態でコンパレータを使用することはできません。 – Holger
文字列。それは引数としてリストを受け入れる私のクラスのコンストラクタで宣言されています。 –
Myoch