是否可以结合这些方法? (Java泛型)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否可以结合这些方法? (Java泛型),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2095字,纯文字阅读大概需要3分钟。
内容图文
我正在为大学做家庭作业,不允许我改变课程的属性.我想出了一个搜索方法的代码,但我不禁注意到重复的代码.我需要构建两种搜索方法.搜索ArrayList< Person>的人和一个搜索ArrayList< Module的人. Person和Module都有一个String name属性.
public static <T extends Person> ArrayList<T> findPerson(List<T> list, String query) {
ArrayList<T> matching = new ArrayList<>();
list.forEach(s -> {
if (s.name.contains(query)) matching.add(s);
});
return matching;
}
public static <T extends Module> ArrayList<T> findModule(List<T> list, String query) {
ArrayList<T> matching = new ArrayList<>();
list.forEach(s -> {
if (s.name.contains(query)) matching.add(s);
});
return matching;
}
是否可以在不改变类结构的情况下组合这些方法?我沿着这些方向尝试了一些东西,但它似乎仍然不起作用:(方法签名中的不同类型参数)
public static <T extends Person, Module> ArrayList<T> findModule(List<T> list, String query) {
ArrayList<T> matching = new ArrayList<>();
list.forEach(s -> {
if (s.name.contains(query)) matching.add(s);
});
return matching;
}
编辑:以下是课程:
public abstract class Person extends TableItem {
public String name, famName, street, zip, city;
public String[] data = new String[7];
...
}
public class Module extends TableItem {
private Manager manager;
public String[] data = new String[5];
public String name, nr, profID, semester, part;
public ArrayList<String> participants;
...
}
public abstract class TableItem {
public abstract String getString();
public abstract void updateData();
}
解决方法:
理想情况下,你让你的两个类实现相同的接口,比如NamedItem,它有一个函数getName(),它会更简单,因为你让你的函数采用List<?扩展NamedItem>.如果无法做到这一点,则必须提供一个函数来确定要匹配的String属性.
public static <T> List<T> find(List<T> list, String query, Function<T, String> keyExtractor) {
return list
.stream()
.filter(s -> keyExtractor.apply(s).contains(query))
.collect(Collectors.toList());
}
然后你就可以使用它:
List<Person> matchingPersons = find(allPersons, query1, Person::getName);
List<Module> matchingModules = find(allModules, query1, Module::getName);
您可以将它与任何属性一起使用,而不仅仅是名称.您只需将提取要匹配的String的函数作为第3个参数传递.
内容总结
以上是互联网集市为您收集整理的是否可以结合这些方法? (Java泛型)全部内容,希望文章能够帮你解决是否可以结合这些方法? (Java泛型)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。