使用Java Enum流生成map

问题描述 投票:0回答:1

我有一个枚举类

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)
它有一些静态与非静态问题

java lambda enums java-stream
1个回答
0
投票

尝试以下操作。

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()));
© www.soinside.com 2019 - 2024. All rights reserved.