gpt4 book ai didi

Java泛型方法来过滤和查找列表中的第一个元素

转载 作者:行者123 更新时间:2023-12-02 08:34:09 25 4
gpt4 key购买 nike

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

我还有 10 个其他类似的方法。相同的签名,相同的逻辑。唯一不同的是 List 参数使用不同的对象,例如List<Data> list ,或List<Option> list等等。所有对象都有 getName()方法在其中。我想创建一个通用方法并删除所有其他方法。

如果我使用这样的东西,

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

我无权访问 getName()方法。创建此方法的最简单方法是什么?反射 api 是唯一的选择吗?

编辑:

我发现了我犯的错误。它工作得很好,如下所示:

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();
}

关于Java泛型方法来过滤和查找列表中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60708666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com