我很确定这不可能在一行中完成,但是我只想检查一下:

List<WidgetItem> selectedItems = null;
Map<Integer, List<WidgetItem>> itemsByStockAvailable = WidgetItems.stream()
     .collect(Collectors.groupingBy(WidgetItem::getAvailableStock));
selectedItems = itemsByStockAvailable.get(
     itemsByStockAvailable.keySet().stream().sorted().findFirst().get());

基本上,我将所有小部件项收集到一个 map 中,其中键是availableStock数量,而值是具有该数量的所有小部件的列表(因为多个小部件可能具有相同的值)。有了该映射后,我想选择与最小键对应的映射值。创建 map 的中间步骤不是必需的,这只是我想到的唯一方法。

最佳答案

看来,您想要的是将所有具有最低可用库存的小部件项目保持在分组状态。在这种情况下,您可以将分组的数据收集到 TreeMap 中,以确保基于库存的增加值进行排序,并使用 firstEntry() 检索第一个条目。

List<WidgetItem> selectedItems =
    widgetItems.stream()
               .collect(Collectors.groupingBy(
                  WidgetItem::getAvailableStock,
                  TreeMap::new,
                  Collectors.toList()
               ))
               .firstEntry()
               .getValue();

这样做的好处是可以一次通过初始列表。

10-07 13:42