ArrayListを汎用コレクションにキャストするにはどうすればよいですか?私は "SearchListener"の問題を "<"と強調表示しています-----------これは動作しません!!!! "ArrayListを汎用抽象コレクションにキャストする
私はClass.cast(o)について読んでいますが、ここでそれを適用する方法を理解していません。
public abstract class MyTufinCollection<T> extends AbstractCollection<T> implements ListModel<String>{
}
public class SearchListener<T,C extends MyTufinCollection<T>> implements DocumentListener{
private JList jlist;
private C staticCollectionOfTypeT;
private List<Predicate<T>> predicateList = new ArrayList<>();
//get the String fields, and build Predicate from them.. add to predicateList.
public SearchListener(JList jlist, List<Predicate<T>> predicateList, C collection) {
this.jlist = jlist;
this.staticCollectionOfTypeT=collection;
this.predicateList=predicateList;
}
@Override
public void insertUpdate(DocumentEvent de) {
filter();
}
@Override
public void removeUpdate(DocumentEvent de) {
filter();
}
@Override
public void changedUpdate(DocumentEvent de) {
filter();
}
private void filter() {
jlist.setModel((ListModel)staticCollectionOfTypeT);
C items = (C) jlist.getModel();
Stream<T> itemStream = items.stream().filter(x ->{
Stream<Predicate<T>> predicateStream= predicateList.stream();
return predicateStream.map(predicate -> predicate.test(x)).reduce((a,b)->a && b).get();
});
ArrayList<T> collect = itemStream.collect(Collectors.toCollection(ArrayList::new));
C name = (C)collect; // <-----------This Doesn't work!!!!
jlist.setModel((ListModel)name);
}
}
なぜそれはうまくいくと思いますか? –
どうすればこの作品を作れますか?新しいMyTufinCollection()コンビニエンスクラスを作成し、Collectors.toCollection(new MyTufinCollection(){...})を使用しますか?それとも良い方法がありますか? –