- 这个答案不算数学:如何使用Java 8流API存储enum以映射
我有一个枚举:
public enum SheetRows{
totalActive("Total active");
String value;
SheetRows(String value){
this.value = value;
}
public String getValueForTable() {
return value;
}
}
如何将此枚举转换为HashMap<SheetRows, String>
?
我尝试使用:
HashMap<SheetRows, String> cellsMap = Arrays.asList(SheetRows.values()).stream()
.collect(Collectors.toMap(k -> k, v -> v.getValueForTable()));
但这段代码不是可编译的。
以下操作应该有效,问题是您正试图将Map
分配给HashMap
Map<SheetRows, String> map = EnumSet.allOf(SheetRows.class)
.stream()
.collect(Collectors.toMap(Function.identity(), SheetRows::getValueForTable));
System.out.println("map = " + map); // map = {totalActive=Total active}
如果您真的需要返回HashMap
,您也可以使用重载来获取供应商和mergeFunction,如下所示。
mergeFunction永远不会被调用,因为您的枚举是唯一的,所以只需随机选择一个即可。
HashMap<SheetRows, String> map = EnumSet.allOf(SheetRows.class)
.stream()
.collect(Collectors.toMap(Function.identity(), SheetRows::getValueForTable, (o1, o2) -> o1, HashMap::new));
System.out.println("map = " + map); // map = {totalActive=Total active}