Java 按用户获取已排序的列表
我需要得到一个按费用递减值排序的列表,但要按纳税人排序。假设1号纳税人有3项费用,2号纳税人有2项费用,我需要从第一个纳税人那里得到费用并对其进行排序,然后对2号纳税人的费用进行排序。到目前为止,我得到的是:Java 按用户获取已排序的列表,java,Java,我需要得到一个按费用递减值排序的列表,但要按纳税人排序。假设1号纳税人有3项费用,2号纳税人有2项费用,我需要从第一个纳税人那里得到费用并对其进行排序,然后对2号纳税人的费用进行排序。到目前为止,我得到的是: public TreeSet<Expense> getListFactIndivValor(){ TreeSet<Expense> t = new TreeSet<Expense>(new ComparatorValue(-1)); //-1 b
public TreeSet<Expense> getListFactIndivValor(){
TreeSet<Expense> t = new TreeSet<Expense>(new ComparatorValue(-1)); //-1 because I had to use this comparator to do ascending order on another method
Company c = (Company) this.users.get(userId); //Entity that issues expenses. has the method getExpenses. Gets the Company logged in.
for(User u: this.users.values()){ //this.users has all the users on the system
if(!u.getUserType()){ // If user is Taxpayer
for(Expense e: c.getExpenses().values()){ //gets all the expenses of the Company.
if(u.getTIN().equals(e.getTINUser())){ //if the user TIN is the same that the one on expense
t.add(e.clone());
}
}
}
}
return t;
}
我认为他会像我所希望的那样对每个纳税人进行检查,但只是按价值排序,没有考虑到我需要每个纳税人都进行检查。一个集合树集合并不是为了有一个特定的顺序而设计的。而是使用ArrayList作为方法的结果
您必须执行两个步骤:
使用可排序的树状图对所属用户的费用进行排序
迭代排序的用户并提取her费用
public List<Expense> getListFactIndivValor()
{
Comparator<TINUser> comparator = TINUser::compareTo;
TreeMap<TINUser, List<Expense>> map = new TreeMap<>( comparator);
Company c = new Company();
for ( Expense e : c.getExpenses() )
{
List<Expense> expenses = map.get( e.getTINUser());
if ( expenses == null )
{
expenses = new ArrayList<>();
map.put( e.getTINUser(), expenses);
}
expenses.add( e);
}
List<Expense> result = new ArrayList<>();
for ( TINUser u : map.descendingKeySet() )
{
List<Expense> expenses = map.get( u);
for ( Expense expense : expenses )
{
result.add( expense);
}
}
return result;
}
在TINUser类中实现一个compareTo方法,该方法定义排序标准。什么是f?为什么每次都要重复使用相同的c公司费用?你的问题不清楚应该是e,已经解决了。第二个问题我不明白。TINUser变量在类费用中。我需要在那里实现比较?而且我的Tinuer只是一个字符串,我应该为TreeMap回复TreeMap吗?是的。由于您没有提供足够的详细信息,我只是猜测了您的数据类型。如果它是一个字符串,它已经是一个可比较的,您不需要将比较器传递给树映射,因为它按照自然顺序排序。实际上,它仍然缺少比较每个费用的部分。我需要按降序值对列表进行排序。我应该将列表更改为树集并使用比较器对其进行排序吗?使用ArrayList并使用比较器对其进行排序