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

我必须上课


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() 动态化并返回一个动态结果。


所以如果我发送消费者名单,那么它应该返回我所有工资的总和,如果我发送捐赠者的名单,那么它应该向我发送捐赠的金额?


如何做到这一点?


缥缈止盈
浏览 161回答 1
1回答

茅侃侃

首先,您可能不会将类GenericClass设为泛型,而是将方法设为泛型method1()。然后你可以提供一个ToIntFunction<T>接受一个类型的对象T并返回一个int值的。因此,您的方法可能如下所示(Java8 代码):public <T> int method1(List<T> list, ToIntFunction<T> transformation){&nbsp;&nbsp;&nbsp; return list.stream().collect(Collectors.summingInt(transformation));&nbsp; &nbsp; &nbsp;&nbsp;}然后你会像这样调用这个方法:int sumSalaries = method1(consumers, Consumer::getSalary);int sumDonations = method1(donors, Donor::getAmount);Java8 之前的代码也是可能的,但它会大一点(您需要提供ToIntFunction该接口的实现和稍大的方法体)。或者,您可以使用两个类都实现的接口,但这需要您使用通用方法名称(例如getAmount()或getIntValue()等)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java