Ice*_*nte 6 java java-8 java-stream
我很确定这在一行中是不可能的,但我只是想检查一下:
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());
Run Code Online (Sandbox Code Playgroud)
基本上我将所有小部件项目收集到一个地图中,其中关键字是availableStock数量,值是具有该数量的所有小部件的列表(因为多个小部件可能具有相同的值).有了这张地图后,我想选择与最小键对应的地图值.创建Map的中间步骤不是必需的,这是我能想到的唯一方法.
您希望保留所有以最低可用库存分组的窗口小部件项目.在这种情况下,您可以将分组数据收集到a中,TreeMap
以确保基于库存值增加的排序并检索第一个条目firstEntry()
List<WidgetItem> selectedItems =
widgetItems.stream()
.collect(Collectors.groupingBy(
WidgetItem::getAvailableStock,
TreeMap::new,
Collectors.toList()
))
.firstEntry()
.getValue();
Run Code Online (Sandbox Code Playgroud)
优点是它完成了初始列表的一次通过.