java - 如何使用流重用具有几乎相同实现的 Java 方法
问题描述
我有一系列 Java 方法,除了下面实现的不同类(如Class1Number
、Class2Number
、Class3Number
等)外,它们看起来都一样。有没有办法编写一个将类作为参数的方法?
Set<String> trimClass1NumberList(Set<String> criteria){
Set<String> validData = new HashSet<>();
Set<Class1Number> numberList = criteria.stream().map(String::trim).map(Class1Number::valueOf)
.filter(Class1Number::isWellformed).collect(Collectors.toSet());
for (Class1Number num : numberList) {
// Do somehing with validData
}
return validData;
}
Set<String> trimClass2NumberList(Set<String> criteria){
Set<String> validData = new HashSet<>();
Set<Class2Number> numberList = criteria.stream().map(String::trim).map(Class2Number::valueOf)
.filter(Class2Number::isWellformed).collect(Collectors.toSet());
for (Class2Number num : numberList) {
// Do somehing with validData
}
return validData;
}
解决方案
你可以做类似的事情
<T> Set<String> trimNumberList(Set<String> criteria, Function<String, T> valueOf, Predicate<T> isWellFormed){
Set<String> validData = new HashSet<>();
Set<T> numberList = criteria.stream().map(String::trim).map(valueOf)
.filter(isWellFormed).collect(Collectors.toSet());
for (T num : numberList) {
// Do somehing with validData
}
return validData;
}
然后像这样称呼它
trimNumberList(criteria, Class1Number::valueOf, Class1Number::isWellFormed);
trimNumberList(criteria, Class2Number::valueOf, Class2Number::isWellFormed);
但是,在 for 循环中对您的实例执行任何特殊操作都需要一个通用的基本类型。
推荐阅读
- sql-server - 如何在 SQL Server 中使用 LIKE 谓词在文本中搜索单引号字符(')
- tensorflow - 如何将需要 one-hot 编码的分类数据与 tensorflow 中的连续数据混合?
- php - PHP | 在 Ajax 请求中获取 ERR_CONTENT_DECORDING_FAILED
- python - 如何将两个系列转换为数据框的两个单独列?
- vba - 在应用到项目任务 VBA MS 项目之前检查资源的可用性
- .net-core - corefx 源没有按预期重建
- portable-executable - AddressOfEntryPoint 中的 PE 文件格式有误?
- c - 如何将数组放入 int 但使用 scanf
- android - 用于创建 apk 的 android gradle/gradlew 命令行构建
- javascript - 创建一个反应项目