【发布时间】:2018-01-01 15:08:52
【问题描述】:
对不起,描述太长了,但我试图准确地解释内容,
我有两个不同对象的列表,例如,
class Company {
int id;
String name;
/* getters and setters */
}
class CompanyBySupplier {
String nameId;
Long stakeValue;
Long incomeValue;
/* getters and setters */
}
这些列表中的共同属性是,id of Company 和 nameId of CompanyBySupplier
listToSort 是CompanyBySupplier 的对象列表,sortedList 是Company 的对象列表,
List<CompanyBySupplier> listToSort = {["ID3,546456,56464"],["ID4",4565,456456],["ID1,1234,2345"],["ID2",4335,34535],["ID5,345,546"]}
List<Company> sortedList = {["ID1","A"],["ID2","B"],["ID3","C"],["ID4","D"],["ID5","E"]}
如果您观察到 sortedList 已经根据我想为 lisToSort 间接执行的名称属性进行排序。
这意味着,我需要按sortedList 的顺序排列的listToSort 与Company 的id 和CompanyBySupplier 的nameId 的比较
所以预期的输出应该是,
list listToSort = {["ID1,1234,2345"],["ID2",4335,34535],["ID3,546456,56464"],["ID4",4565,456456],["ID5,345,546"]}
因为 ID1,ID2,ID3,ID4,ID5 是公司 sortedList 中的顺序。
我能想到的是通过比较两个列表的 id 和 nameid 来创建一个新列表,其中将包含新类型的对象,例如,
class CompanyData {
String actualCompanyName;
Long stakeValue;
Long incomeValue;
}
并在 actualCompanyName 上使用 Comparator 这将解决我的问题。 但我很想知道有没有其他更好的方法来做到这一点
【问题讨论】:
-
这是java吗?对象公司 {...} - 它是什么?
-
And List
sortedList = {["ID1","A"]... ,但是Company类(如果是java)有int和String字段,有2个String字段跨度> -
@Alexei Stepanov 是的,它是 java 对象,但只是为了视觉理解,我这样提到它
-
您可以为 sortedList 创建一个 hashmap,其中 nameId 为 key,index 为 value。现在对于 listToSort 中的每个对象,搜索 id 并将对象放在相应的索引处。
-
@Sandy 谢谢我做了同样的事情,它为 for 循环节省了额外的迭代
标签: java list sorting arraylist collections