- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要返回一个列表,或者一般来说是一个集合,它为我提供了在整个系统中花费最多的 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/
我正在努力实现下一个目标: 家长: public class Animal { private List relatives; public List getRelatives() {
是否可以创建一个包含不同类型委托(delegate)的列表?例如考虑这两个委托(delegate): class MyEventArg1 : EventArgs {} class MyEventArg
我的问题几乎与 C equivalent to Fortran namelist 相同 关键区别在于我使用的是 C++/17,想知道是否有更符合 C++ 习惯的方式来解决这个问题。 最佳答案 没有相当
我正在使用具有固定线程池大小的全局执行程序服务。我们有一堆相关任务提交执行并等待 future 列表。 最近,我们遇到了 CPU 利用率高的问题,在调试时我发现对 future 列表中的一项调用 ge
我习惯了 Fortran,其中我使用名称列表顺序读入从文件中获取变量。这让我有一个看起来像这样的文件 &inputDataList n = 1000.0 ! This is the first var
为什么TimePicker在 knockout 名单之外工作得很好,但在他身上就不行了。如何在 knockout 中启动? @{ ViewBag.Title = "Index"; } Index
我正在阅读 https://www.nba.com/history/awards/mvp .我尝试按降序打印出名称和计数。 Kareem Abdul-Jabbar: 6 Bill Russell: 5
我想知道如何在 Python 中轻松地从 Fortran 名单文件读取和写入值。 最佳答案 有一个模块叫做f90nml读取/写入 Fortran 名称列表。使用此模块,您可以将名单读入嵌套的 Pyth
我是一名优秀的程序员,十分优秀!