gpt4 book ai didi

java - 支出最多的10名纳税人名单

转载 作者:行者123 更新时间:2023-12-02 11:12:50 25 4
gpt4 key购买 nike

我需要返回一个列表,或者一般来说是一个集合,它为我提供了在整个系统中花费最多的 10 个纳税人。这些类分为用户、纳税人(扩展了用户)和费用,在我的主类 Main 中,我有一个 Map 保存用户和费用的每个值,分别为 Map<String, User> users和一个 Map<String, Expense> expenses .

第一步是浏览用户 map 并检查它是否是纳税人,然后为该纳税人获取他已完成的所有费用。每笔费用中都有一个名为 Value 的变量,其中有一个 getValue 方法来返回该 Value。

我已经尝试这样做,但如果下一个纳税人的费用值总和高于集合“末尾”的金额,那么我在更新集合时遇到问题。

此外,我更希望这不是在 Java 8 中完成的,因为我对此不太满意,而且我需要在方法中间设置更多条件。

编辑(到目前为止我所拥有的):

public List<Taxpayer> getTenTaxpayers(){
List<taxpayer> list = new ArrayList<Taxpayer>();

for(User u: this.users.values()){
if(!u.getUserType()){ // if it is a Taxpayer
Taxpayer t = (Taxpayer) u;
double sum = 0;
for(Expense e: this.expenses.values()){
if(t.getNIF().equals(e.getNIFClient())){ //NIF is the code that corresponds to the Taxpayer. If the expense belongs to this Taxpayer, enters the if statement.
sum += e.getValue();
if(list.size()<10){
list.add(t.clone());
}
}
}
}
}
}

最佳答案

所以,如果我理解正确的话,当您的列表中已经有 10 个纳税人时,您正在努力思考如何将另一个纳税人添加到列表中以维持仅前 10 个“支出者”

解决此问题的一种方法是收集所有纳税人的费用,并将他们全部添加到您的列表中。然后按照他们花费的金额对列表进行倒序排序。然后只需从列表中获取前 10 个条目即可。

您可以使用Collections.sort()来做到这一点定义您自己的自定义方法 Comparator

类似于:

List<Taxpayer> taxpayers =...

Collections.sort(taxpayers, new Comparator<Taxpayer>()
{
@Override
public int compare(Taxpayer o1, Taxpayer o2)
{
return o1.sum - o2.sum; // using your correct total spent here
// or to just sort in reverse order
// return o2.sum - o1.sum;
}
});

或者如果Taxpayer实现Comparable你可以使用

Collections.sort(taxpayers) 

然后反转

Collections.reverse(taxpayers)

然后进入前10名

List<Taxpayer> top10 = taxpayers.subList(0, 10);

为了提高效率,您可以只定义比较器以相反的顺序对列表进行排序 - 那么您不需要反转列表 - 只需获取前 10 个即可。

关于java - 支出最多的10名纳税人名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com