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