我有如下集合:
Map<String, Map<SomeEnum, Long>> map = ...
以下是样例数据:
{"Foo": {
SomeEnum.BAR1: 1,
SomeEnum.BAR2: 2,
SomeEnum.BAR3: 3
},
"two": {...}
既然我已经知道所有枚举值,我想将其转换为POJO列表。该对象的定义如下:
class SomeClass {
String name;
long bar1Value;
long bar2Value;
long bar3Value;
}
我尝试了不同的解决方案,例如使用嵌套映射:
map.entrySet().stream()
.map(e -> e.getValue().entrySet().stream().map(innerEntry -> {
long bar1 = 0;
long bar2 = 0;
long bar3 = 0;
if(innerEntry.getKey().equals(SomeEnum.BAR1)) bar1 = innerEntry.getValue();
if(innerEntry.getKey().equals(SomeEnum.BAR2)) bar2 = innerEntry.getValue();
if(innerEntry.getKey().equals(SomeEnum.BAR3)) bar3 = innerEntry.getValue();
return new SomeClass(e.getKey(), bar1, bar2, bar3);
}).collect(toList()).collect(toList());
不幸的是,我得到的是 List<List<SomeClass>>
。
是否有其他更优雅的方式来处理这个问题?
String
和Enum
。这样做是行不通的。您可以尝试使用枚举的字符串表示进行比较。 - smac89flatMap()
方法? - AbraflatMap
而不是建议中的map
。 - smac89