将 `Arrays.stream(…).collect(…)` 从 Java 8 转换为 Java 7

Transform `Arrays.stream(…).collect(…)` from Java 8 to Java 7

如何改造这段代码:

private static Map<CustomObj<? extends CustomOtherObj>, CustomEnumeration> map;
    if (map == null) {
        map = Arrays.stream(CustomEnumeration.values())
            .collect(Collectors.toMap(x -> x.source, x -> x));
    }

变成Java7相当于? (Arrays.stream.collect(Collectors....) 部分。

基本上,上面的代码将一些元素放入地图中。

很简单

if (map == null) {
    map = new HashMap<>();
    for(CustomEnumeration e : CustomEnumeration.values())
        map.put(e.source, e);
}

map() lambda 只是对集合中的每个元素执行一个操作。所以,它大致相当于一个 foreach 风格的 for 循环。换句话说,见下文。我保留 x(不是一个很好的变量名)以显示相似性。

if (null == map) {
    map = new HashMap<CustomObj<? extends CustomOtherObj>, CustomEnumeration>();
    for (CustomEnumeration x : CustomEnumeration.values()) {
        map.put(x.source, x);
    }
}