【发布时间】:2023-03-30 02:15:01
【问题描述】:
给定:
enum Food{
FRUITS, VEGGIES;
}
Map<String, List<String>> basketMap = new HashMap<>();
basketMap .put("bucket1", Arrays.asList("apple", "banana"));
basketMap .put("bucket2", Arrays.asList("orange", "kiwi"));
basketMap .put("bucket3", Arrays.asList("banana", "orange"));
需要生成list的map(popultefruitBaskerMap)
Map<String, Map<Food, List<String>> fruitBasketMap = new HashMap<>();
最终输出:
fruitBasketMap:
[
bucket1, [Food.FRUITS, {"apple", "banana"}],
bucket2, [Food.FRUITS, {"orange", "kiwi"}],
bucket3, [Food.FRUITS, {"banana", "orange"}]
]
我尝试了以下(但没有成功)
fruitBasketMap = basketMap.entrySet().stream().collect(
Collectors.toMap(Map.Entry::getKey,
Collectors.toMap(Food.FRUITS,
Collectors.toList(Map.Entry::getValue())
)
)
);
谁能告诉我该怎么做?
【问题讨论】:
-
您的代码的预期结果是什么?那张地图应该怎么填?它会包含任何蔬菜吗?
-
不,您不需要生成
Map<String, Map<Food, List<String>>。您需要创建一个类,并将类型更改为Map<String, ClassType> -
@Pshemo 它永远不会包含蔬菜,它只包含水果。刚刚更新了帖子并添加了预期的最终输出。
-
您真的仅限于 Java 8 还是 Java 9 或更高版本的方法也可用?例如
Map.of会让你写像Collectors .toMap( Map.Entry::getKey, entry -> Map.of(Food.FRUITS, entry.getValue()) )这样的收集器 -
如果您仅限于 Java 8 而不是
entry -> Map.of(...),您可以使用entry -> { Map<Food, List<String>> map = new HashMap<>(); map.put(Food.FRUITS, entry.getValue()); return map; }
标签: java collections java-8 java-stream