如何使用java8流将具有属性的enum转换为map


  • 这个答案不算数学:如何使用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}

最新更新