java - 发送不同对象的列表并返回其属性的总和
问题描述
我要上课
public class Consumer{
private String name;
private int salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
接下来
public class Donor {
private String name;
private int amount;
private String location;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
现在我有另一个类,其中包含一个方法 method1()
public class GenericClass<T> {
public void method1(List<T> list){
Iterator i = list.iterator();
while (i.hasNext()){
}
}
}
我的主要方法是
public class MainMethod {
public static void main(String[] args) {
List<Donor> d = new ArrayList<>();
Donor donor = new Donor();
donor.setAmount(500);
donor.setName("bill");
Donor donor1 = new Donor();
donor.setAmount(1250);
donor.setName("linda");
d.add(donor);
d.add(donor1);
GenericClass genericClass = new GenericClass();
genericClass.method1(d);
}
}
我想让这个 method1() 动态并返回一个动态结果。
因此,如果我发送消费者名单,那么它应该返回我所有工资的总和,如果我发送捐赠者名单,那么它应该向我发送捐赠金额的总和?
如何做到这一点?
解决方案
首先,您可能不会使类GenericClass
通用,而是方法method1()
。
然后你可以提供一个ToIntFunction<T>
类型的对象T
并返回一个int
值。因此,您的方法可能如下所示(Java8 代码):
public <T> int method1(List<T> list, ToIntFunction<T> transformation){
return list.stream().collect(Collectors.summingInt(transformation));
}
然后,您将像这样调用该方法:
int sumSalaries = method1(consumers, Consumer::getSalary);
int sumDonations = method1(donors, Donor::getAmount);
Java8 之前的代码也是可能的,但它会更大一些(您需要提供ToIntFunction
该接口的实现和稍大的方法体)。
或者,您可以使用两个类都实现的接口,但这需要您使用通用方法名称(例如getAmount()
或getIntValue()
等)
推荐阅读
- meson-build - 如何将 Meson 中的文件复制到子目录
- graph - Tinkerpop,“多个”查询
- javascript - 获取 - 下载 Excel 文件不起作用。文件大小 1 kb
- java - 创建一个可以复制一组文件夹和文件的 Maven 插件
- android - setPersistenceEnabled(true) 和 FirebaseRecyclerPagingAdapter
- ehcache - Ehcache 缓存数据,支持集群磁盘存储(复制)
- python - 动画插值 Python Matplotlib
- laravel - How to put the condition on User table with condition on subject table
- python - SVN 以编程方式更新 - python
- mysql - MySQL 连接表并显示不包括特定 user_id 的值