有什么办法可以使这种类型化的方法通用吗?
Is there any way to make this typified method generic?
我正在尝试编写一种方法,该方法采用任何类型的任何集合、两个函数和两个表示特定限制的整数值。
为了更好地理解,我将展示一个我想构建泛型的示例方法。
private void buildSums() {
double sum = 0;
for (YearlyLineValuesEntity y_l_v_E : yearlyList) {
if (y_l_v_E.getDb() >= 20001 && y_l_v_E.getDb() <= 20155) {
sum += y_l_v_E.getAmount();
}
}
}
示例方法中的 return 值在这种情况下并不重要。仅用于基本了解我的目标。
这是我的尝试:
上面 if 语句中的数字在我试过的以下方法中由参数 "from" 和 "to" 表示。 getDb() 应该来自参数 "propertyDb" 而 getAmount() 应该来自 "propertyAmount"-paramater.
<T> List <Double> sumUpGroup(Collection<? extends T> entityList, Function<? super T, Integer> propertyDb, Function<?
super T, Double> propertyAmount, int from, int to) {
Double sum = null;
List<Double> list = null;
for (int i = 0; i < entityList.size(); i++) {
EntityList x = entityList.get(i); //generic type
if (x.getDB() >= from && x.getDB() <= to) { //propertyDb here
sum += x.getAmount(); //propertyAmount here
}
}
list.add(sum);
return list;
}
我不知道如何使用作为方法中参数的 2 个函数在代码中进一步处理。我需要另一种方法来解决这个问题吗?
你们有什么想法吗?谢谢
像下面这样的东西会起作用(为了清楚起见,我删除了列表内容)
<T> double sumUpGroup(Collection<? extends T> entityList,
Function<? super T, Integer> dbAccessor,
Function<? super T, Double> amountAccessor,
int from, int to) {
double sum = 0;
for (T entity : entityList) {
int value = dbAccessor.apply(entity);
if (value >= from && value <= to) {
sum += amountAccessor.apply(entity);
}
}
return sum;
}
然后您可以按如下方式调用该方法,当然要使用正确的方法名称
sumUpGroup(myEntities, Entity::getDbValue, Entity::getAmount, 0, 100);
我正在尝试编写一种方法,该方法采用任何类型的任何集合、两个函数和两个表示特定限制的整数值。
为了更好地理解,我将展示一个我想构建泛型的示例方法。
private void buildSums() {
double sum = 0;
for (YearlyLineValuesEntity y_l_v_E : yearlyList) {
if (y_l_v_E.getDb() >= 20001 && y_l_v_E.getDb() <= 20155) {
sum += y_l_v_E.getAmount();
}
}
}
示例方法中的 return 值在这种情况下并不重要。仅用于基本了解我的目标。
这是我的尝试:
上面 if 语句中的数字在我试过的以下方法中由参数 "from" 和 "to" 表示。 getDb() 应该来自参数 "propertyDb" 而 getAmount() 应该来自 "propertyAmount"-paramater.
<T> List <Double> sumUpGroup(Collection<? extends T> entityList, Function<? super T, Integer> propertyDb, Function<?
super T, Double> propertyAmount, int from, int to) {
Double sum = null;
List<Double> list = null;
for (int i = 0; i < entityList.size(); i++) {
EntityList x = entityList.get(i); //generic type
if (x.getDB() >= from && x.getDB() <= to) { //propertyDb here
sum += x.getAmount(); //propertyAmount here
}
}
list.add(sum);
return list;
}
我不知道如何使用作为方法中参数的 2 个函数在代码中进一步处理。我需要另一种方法来解决这个问题吗?
你们有什么想法吗?谢谢
像下面这样的东西会起作用(为了清楚起见,我删除了列表内容)
<T> double sumUpGroup(Collection<? extends T> entityList,
Function<? super T, Integer> dbAccessor,
Function<? super T, Double> amountAccessor,
int from, int to) {
double sum = 0;
for (T entity : entityList) {
int value = dbAccessor.apply(entity);
if (value >= from && value <= to) {
sum += amountAccessor.apply(entity);
}
}
return sum;
}
然后您可以按如下方式调用该方法,当然要使用正确的方法名称
sumUpGroup(myEntities, Entity::getDbValue, Entity::getAmount, 0, 100);