java流分组是通过EnumMap还是其他?

时间:2019-08-02 14:18:36

标签: java java-stream

最快最低内存方面,我应该选择哪个版本?

版本1:

public Map<TYPE, List<Task>> getTaskByType() {
    return tasks.stream()
            .collect(Collectors.groupingBy(Task::getType, 
                     () -> new EnumMap<>(TYPE.class), 
                     Collectors.toList()));
    }

版本2:

public Map<TYPE, List<Task>> getTaskByType() {
    return tasks.stream().collect(Collectors.groupingBy(Task::getType));
}

还是其他版本?

编辑:

如果您有很多枚举,请使用版本1!

1 个答案:

答案 0 :(得分:0)

您的第二个代码段将生成一个HashMap(尽管这是非保证的实现细节)。

因此,javadoc of EnumMap回答了您的问题:

  

此表示非常紧凑且高效。 [...]所有基本操作均在固定时间内执行。它们可能(尽管不能保证)比其HashMap同行更快。

但是我也同意其他评论者的观点:这种行为对应用程序的性能或内存消耗产生重大影响的机会非常低,您应该支持可读性而不是微优化,而不是降低可读性。