从一个列表创建多个列表(按特定字段对列表的对象进行分组)

Create multiple Lists from one (Group List's Objects by a specific field)

假设我有数组:

List<CustEnt> bulkList= CustRepo.fetchData();
//System.out.println(bulkList) -->

给我:

    CustEct(name:"kasis",age:24,surname:"kumar"),CustEct(name:"samika",age:50,surname:"sharma"),CustEct(name:"manoj",age:84surname:"kumar")
OR
bulkList.get(1) --> CustEct(name:"kasis",age:24,surname:"kumar")


创建一个新数组,该数组由姓氏对象的第三个参数分组。 这样我的数组就变成了

ArrayFinal = [CustEct(name:"kasis",age:24,surname:"kumar"),CustEct(name:"samika",age:50,surname:"sharma")],CustEct(name:"manoj",age:84surname:"kumar")

所以当我们执行 .get(1) 时,我们会得到 kasis 和 samika 的对象。

需要有关 java 8 的帮助。 我听说我们可以使用 Map ,但是任何人都可以提供小代码示例或任何其他实施指南。

A Map 跟踪键值对。

  • 您的密钥是姓氏字符串。
  • 您的值是带有该姓氏的 CustEnt 个对象的列表。
Map<String, List<CustEnt>>

带有流和 lambda 的现代语法可以用简短的代码将对象放置在地图中。

类似于:

Map<String, List<CustEnt>> map = originalList.stream.collect(Collectors.groupingBy(CustEnt::getSurename));
Map<String, List<CustEntity>> NamesList
        = bulkList.stream()
        .collect(Collectors.groupingBy(CustEntity::getSurames));

for (Map.Entry<String, List<CustEntity>> entry: NamesList.entrySet()) {
    ExcelGenerationService exp = new ExcelGenerationService( entry.getValue());
//service call
    exp.export(entry.getKey());
}