我有一个HashMap<String, List<Appliance>>
wherename::String
对象中的字段Appliance
用作键,并且每个值都是HashMap
一个对象。每个列表都根据对象的字段“price::BigDecimal”按升序排序。我想创建一个, 使用, 并通过提取先存在于 中的每个列表的第一个元素,然后是第二个元素,等等。所以如果有这些内容:list
Appliance
Appliance
ArrayList<Appliance>
Stream API
HashMap
HashMap
HashMap
["Fridge", [<"Fridge", 100>, <"Fridge", 200>, <"Fridge", 300>],
"Oven", [<"Oven", 150>, <"Oven", 250>, <"Oven", 350>],
"DishWasher", [<"DishWasher", 220>, <"DishWasher", 320>, <"DishWasher", 420>]]
我希望最终名单如下:
[<"Fridge", 100>,
<"Oven", 150>,
<"DishWasher", 220>,
<"Fridge", 200>,
<"Oven", 250>,
<"DishWasher", 320>,
<"Fridge", 300>,
<"Oven", 350>,
<"DishWasher", 420>]
是否可以使用 Java 的 8 Stream API 以功能方式做到这一点?
这是我的代码。我想以声明的方式实现相同的结果。
while(!appliancesMap.isEmpty()) {
for (Map.Entry<String, List<Appliance>> entry :
appliancesMap.entrySet()) {
String key = entry.getKey();
List<Appliance> value = entry.getValue();
finalList.add(value.get(0));
value.remove(0);
if (value.size() == 0) {
appliancesMap.entrySet()
.removeIf(predicate -> predicate.getKey().equals(key));
} else {
appliancesMap.replace(key, value);
}
}
}