Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送不同对象的列表并返回其属性的总和_Java - Fatal编程技术网

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

Java 发送不同对象的列表并返回其属性的总和,java,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(

我必须去上课

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()方法

公共类GenericClass{
公共作废方法1(列表){
迭代器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);
    }




}
公共类main方法{
公共静态void main(字符串[]args){
列表d=新的ArrayList();
供体=新供体();
捐赠者:设定金额(500);
捐赠人名称(“法案”);
捐赠者捐赠者1=新捐赠者();
捐赠者:设定金额(1250);
捐赠者名称(“琳达”);
d、 增加(捐助者);
d、 添加(donor1);
GenericClass GenericClass=新的GenericClass();
方法1(d);
}
}
我想使method1()成为动态的,并返回一个动态结果

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


如何做到这一点

首先,您可能不会使类
GenericClass
generic,而是使方法
method1()

然后您可以提供一个
ToIntFunction
,它接受类型为
T
的对象并返回一个
int
值。因此,您的方法可能如下所示(Java8代码):

Java8之前的代码也是可能的,但它会稍微大一点(您需要提供
ToIntFunction
、该接口的实现和稍微大一点的方法体)

或者,您可以使用两个类都实现的接口,但需要使用公共方法名(例如
getAmount()
getIntValue()
等)

可能的重复
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);
    }




}
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);