我有一个枚举类
public enum MyEnum {
A("A"),
B("B");
private final String key;
}
我想生成这样的地图:
private Map<MyEnum, MyClass> myMethod(String input) {
Map<MyEnum, MyClass> result = Maps.newHashMap();
for (MyEnum enum : MyEnum.values()) {
Optional<MyClass> value = helper(enum, input);
value.ifPresent(val -> result.put(enum, val));
}
return result;
}
我是 lambda/stream 的新手,我们可以将其重构为:
private Map<MyEnum, MyClass> myMethod(String input) {
return MyEnum.values().stream().map(...).collect(Collector.toMap(...));
}
我尝试使用
Arrays.stream()...
但最后当我使用collect(Collector.toMap(Map.Entry::getKey, Map.Entry::getValue)
它有一些静态与非静态问题
尝试以下操作。
Map<MyEnum, MyClass> result
= Stream.of(MyEnum.values())
.map(x -> Map.entry(x, helper(x, input)))
.filter(x -> x.getValue().isPresent())
.collect(Collectors.toMap(Map.Entry::getKey, x -> x.getValue().get()));