我很确定这不可能在一行中完成,但是我只想检查一下:
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();
这样做的好处是可以一次通过初始列表。