为了账号安全,请及时绑定邮箱和手机立即绑定

发送不同对象的列表并返回它们的属性总和

发送不同对象的列表并返回它们的属性总和

缥缈止盈 2021-09-03 14:14:34
我必须上课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() 动态化并返回一个动态结果。所以如果我发送消费者名单,那么它应该返回我所有工资的总和,如果我发送捐赠者的名单,那么它应该向我发送捐赠的金额?如何做到这一点?
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

首先,您可能不会将类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()等)


查看完整回答
反对 回复 2021-09-03
  • 1 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信