フィルタにJavaのジェネリック方法と、リストの最初の要素を見つけます

監督:
private Feature findFeature(String name, List<Feature> list) {
    for (Feature item : list) {
        if (item.getName().equals(name)) {
            return  item;
        }
    }
    return null;
}

私はこのような10の他の方法を持っています。同じシグネチャ、同じロジック。唯一の異なるリストのパラメータは、例えば、異なるオブジェクトを使用していることであるList<Data> list、またはList<Option> list、その他のすべてのオブジェクトがあるgetName()ことで方法を。私は、一般的な方法を作成し、他のすべてを削除します。

私はこのようなものを使用している場合は、

private <T> T findInList(String name, List<T> list) {

私がアクセス権を持っていないgetName()方法。このメソッドを作成する最も簡単な方法は何ですか?リフレクションAPIが唯一のオプションですか?

EDIT:

私は私がやった間違いを発見しました。それはこのようにうまく働いています。

for (FeatureEntity entity : data.getFeatures()) {
    Predicate<Feature> filter = f -> f.getName().equalsIgnoreCase(entity.getName());
    if (entity.getFeatureId() != null && findInList(featureList, filter) == null) {
        FeatureEntity n = new FeatureEntity();
        n.setId(entity.getId());
        // ...
    }
}
デッドプール :

あなたが一般的なリストを取るジェネリックメソッドを作成することができPredicate濾過した後、最初に一致した項目を取得するには

private <T> T findFeature(List<T> list, Predicate<T> predicate) {
    return list.stream().filter(predicate).findFirst().orElse(null);
}

そして、作成Predicateに必要なタイプとし、そのメソッドを呼び出します

Predicate< Feature > filter = f->f.getName().equalsIgnoreCase(name);
findFeature(list,filter);

別の側で、あなたも返すことができるOptional<T>代わりに、nullどの要素が見つからないとき:

private <T> Optional<T> findFeature(List<T> list, Predicate<T> predicate) {
    return list.stream().filter(predicate).findFirst();
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=291869&siteId=1