你可以这样做:
Map<String, Integer> map = menu.getRecipes().stream()
.collect(Collectors.toMap(recipe -> recipe.getItem().getItemId(), recipe -> recipe.getQuantity()));
示例完整代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Item item1 = new Item("1", "Item1", "Item1 Description");
Item item2 = new Item("2", "Item2", "Item2 Description");
Item item3 = new Item("3", "Item3", "Item3 Description");
Recipe recipe1 = new Recipe(item1, 3);
Recipe recipe2 = new Recipe(item2, 5);
Recipe recipe3 = new Recipe(item3, 7);
Menu menu = new Menu();
menu.getRecipes().add(recipe1);
menu.getRecipes().add(recipe2);
menu.getRecipes().add(recipe3);
// System.out.println(menu.getRecipes());
Map<String, Integer> map = menu.getRecipes().stream()
.collect(Collectors.toMap(recipe -> recipe.getItem().getItemId(), recipe -> recipe.getQuantity()));
map.forEach((k, v) -> System.out.println(k + " => " + v));
}
}
class Menu {
private List<Recipe> recipes;
Menu() {
recipes = new ArrayList<Recipe>();
}
public List<Recipe> getRecipes() {
return recipes;
}
}
class Recipe {
private Item item;
private Integer quantity;
public Recipe(Item item, Integer quantity) {
super();
this.item = item;
this.quantity = quantity;
}
public Item getItem() {
return item;
}
public Integer getQuantity() {
return quantity;
}
@Override
public String toString() {
return "Recipe [item=" + item + ", quantity=" + quantity + "]";
}
}
class Item {
private String itemId;
private String itemName;
private String description;
public Item(String itemId, String itemName, String description) {
super();
this.itemId = itemId;
this.itemName = itemName;
this.description = description;
}
public String getItemId() {
return itemId;
}
@Override
public String toString() {
return "Item [itemId=" + itemId + ", itemName=" + itemName + ", description=" + description + "]";
}
}
输出:
1 => 3
2 => 5
3 => 7