【问题标题】:Sort a list depends on another sorted list which has one attribute in common for sorting对列表进行排序取决于另一个排序列表,该列表具有一个共同的排序属性
【发布时间】: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

listToSortCompanyBySupplier 的对象列表,sortedListCompany 的对象列表,

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 的顺序排列的listToSortCompanyidCompanyBySuppliernameId 的比较

所以预期的输出应该是,

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


【解决方案1】:

您的排序列表已经根据 Id 排序。您可以根据相同的 id 对第二个列表进行排序。

List<CompanyBySupplier> listToSort = new List<CompanyBySupplier> { new CompanyBySupplier() { nameId = "ID3", stakeValue = "546456", incomeValue = "56464" }, new CompanyBySupplier() { nameId = "ID4", stakeValue = "546456", incomeValue = "56464" }, new CompanyBySupplier() { nameId = "ID2", stakeValue = "546456", incomeValue = "56464" }, new CompanyBySupplier() { nameId = "ID1", stakeValue = "2345", incomeValue = "2346" } };
                List<Company> sortedList = new List<Company>() { new Company(){ id = "ID1", name = "A" }, new Company() { id = "ID2", name = "B" }, new Company() { id = "ID3", name = "C" } };


                listToSort.Sort(delegate(CompanyBySupplier x, CompanyBySupplier y) 
                {
                    return x.nameId.CompareTo(y.nameId);
                });

                foreach (var item in listToSort)
                {

                    Console.WriteLine(item.nameId);
                }
                Console.ReadKey();
            }
        }

        public class Company
        {
            public string id { get; set; }
            public string name { get; set; }
        }

        public class CompanyBySupplier
        {
            public String nameId;
            public string stakeValue;
            public string incomeValue;
        }

【讨论】:

  • 感谢 raza.hasnain 的帮助,但我正在寻找 java 收集解决方案
猜你喜欢
  • 2023-04-01
  • 2012-02-08
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多