使用java 8从Enum对象构建一个映射

时间:2018-03-10 00:29:15

标签: java java-8 hashmap java-stream

我有一个Enum课程:

public enum Fruits {
    Apple(0),
    Banana(1),
    // more objects
}

在另一个课程中,我需要创建一个带有键的地图作为除Apple以外的所有枚举值,将值作为新arrayList。 我知道如何在Java 7中执行此操作:

Map<Fruits, List<Class<?>>> fruitMap = new HashMap<>();

for (Fruits f : Fruits.values()) {
  if (!f.equals(Fruits.APPLE)) {
  fruitMap.put(f, new ArrayList<>());
}

我现在正在学习java 8,并且真的想知道如何使用java 8编写它。 我试了一下:

Map<Fruits, List<Class<?>>> fruitMap = 

Arrays.stream(Fruits.values()).filter(e -> !e.equals(Fruits.Apple))
      .collect(Collectors.toMap(e -> e, new ArrayList<>()));

任何人都可以教我如何在java 8中编写它。

1 个答案:

答案 0 :(得分:0)

你离我不远。 Collectors.toMap需要两个Functions

Map<Fruits, List<Class<?>>> fruitMap = Arrays.stream(Fruits.values())
        .filter(e -> !e.equals(Fruits.Apple))
        .collect(Collectors.toMap(e -> e, e -> new ArrayList<>()));