Sorting 根据内部列表中的字段对Java中的两个嵌套列表进行排序和分组

Sorting 根据内部列表中的字段对Java中的两个嵌套列表进行排序和分组,sorting,collections,java-8,java-stream,Sorting,Collections,Java 8,Java Stream,这里是Java8。我有以下课程: @Getter @塞特 公共类清单项{ //对于同一制造商内的所有实例,该值将相同 私人字符串制造商; 私有字符串模型; 私人价格; } 公共类清单扩展了ArrayList{ } 公共类清单处理器{ 公共作废流程清单集合制造商(){ //基本上是得到一个列表,在 //内部列表是特定项目的所有库存项的列表 //制造商,外部列表是所有制造商的 //存货 列出所有制造商的清单= inventoryService.getAllInventories(); //现在我需要

这里是Java8。我有以下课程:

@Getter
@塞特
公共类清单项{
//对于同一制造商内的所有实例,该值将相同
私人字符串制造商;
私有字符串模型;
私人价格;
}
公共类清单扩展了ArrayList{
}
公共类清单处理器{
公共作废流程清单集合制造商(){
//基本上是得到一个列表,在
//内部列表是特定项目的所有库存项的列表
//制造商,外部列表是所有制造商的
//存货
列出所有制造商的清单=
inventoryService.getAllInventories();
//现在我需要根据制造商名称对列表进行排序,但如何排序???
}
}
所以这里的问题是,
inventoryService.getAllInventories()
,可能会返回相当于:

public List getAllInventories(){
List allInventories=new ArrayList();
List manufacturer1Inv=新的ArrayList();
InventoryItem1=新的InventoryItem(
“Lorem Ipsum Inc”,“FK10”,BigDecimal.valueOf(1.99));
InventoryItem2=新的InventoryItem(
“Lorem Ipsum Inc”,“FK11”,BigDecimal.valueOf(9.99));
制造商1存货增加(第1项);
制造商1存货增加(第2项);
List manufacturer2Inv=新建ArrayList();
InventoryItem3=新的InventoryItem(
“Ice Station Zebra Associates”,“00djd94”,BigDecimal.valueOf(12.99));
InventoryItem4=新的InventoryItem(
“Ice Station Zebra Associates”,“00djd95”,BigDecimal.valueOf(22.99));
List manufacturer2Inv=新建ArrayList();
制造商2存货增加(第3项);
制造商2存货增加(第4项);
List manufacturer3Inv=新建ArrayList();
InventoryItem5=新的InventoryItem(
“ACME公司”、“1234A”、BigDecimal.valueOf(2.99));
InventoryItem6=新的InventoryItem(
“ACME公司”、“1234B”、BigDecimal.valueOf(6.99));
List manufacturer3Inv=新建ArrayList();
制造商3存货增加(第5项);
制造商3存货增加(第6项);
存货m1Inv=新存货(制造商R1INV);
库存m2Inv=新库存(制造厂库存);
存货m3Inv=新存货(制造商3INV);
所有库存。添加(m1Inv);
所有库存。添加(m2Inv);
所有库存。添加(m3Inv);
归还所有库存;
}
属于同一制造商的所有
库存项目
将具有相同的确切
制造商
值。

因此,鉴于此
列表
,我如何根据内部
库存项目
的唯一
制造商
值对其进行排序

也就是说,结果列表将包含以下顺序的元素(给出上述示例):

我迄今为止最好的尝试是:

  public void processInventoriesForAllManufacturers() {

    // Essentially get a List<List<InventoryItem>>, where in the
    // inner list is a list of all InventoryItems for a particular
    // manufacturer, and the outer list is a list of all manufacturer's
    // inventories
    List<Inventory> inventoriesForAllManufacturers =
      inventoryService.getAllInventories();

    // Now I need to sort this list based on manufacturer name, but how???
    List<Inventory> sorted = inventoriesForAllManufacturers.stream().map(inv ->
        Collections::sort(in)).collect(Collectors.toList());

  }
public void processInventoriesForAllManufacturers(){
//基本上是得到一个列表,在
//内部列表是特定项目的所有库存项的列表
//制造商,外部列表是所有制造商的
//存货
列出所有制造商的清单=
inventoryService.getAllInventories();
//现在我需要根据制造商名称对列表进行排序,但如何排序???
列表排序=inventoriesForAllManufacturers.stream().map(inv->
Collections::sort(in)).collect(Collectors.toList());
}
生成编译器错误“对象不是函数接口”。知道我哪里出错了吗


同样,它们只需要按照制造商名称的字母顺序进行分组和排序;在每个制造商的库存中,它们应按插入列表的顺序出现。

首先,
库存
不应扩展
阵列列表
。它应该有一个
列表

按制造商分类应尽可能简单

list.sort(Comparator.comparing(Inventory::getManufacturer));
要使其工作,您只需在库存中有一个
getManufacturer()
方法。由于一个库存的所有项目都有相同的制造商,因此您需要从该方法返回的是第一个项目的制造商

当然,你应该决定库存中没有任何物品是否合法,并决定如何在你的订单中放置此类库存

list.sort(Comparator.comparing(Inventory::getManufacturer));