美文网首页
提示三十七

提示三十七

作者: 飞絮搅青冥 | 来源:发表于2022-07-27 23:02 被阅读0次

提示三十七: 使用 EnumMap 替代序数索引。

ordinal属性是Enum类的私有属性,每个枚举常量类型都会在初始化的时候根据它在枚举类中的数值位置被赋上值。但是由于难以维护,所以一般都不太推荐使用。书中一开始先用ordinal 方法来索引到数组或列表位置,然后推荐了更好用的EnumMap的方法,它解决了数组兼容泛型等一系列问题。

// Using ordinal() to index into an array - DON'T DO THIS!
Set<Plant>[] plantsByLifeCycle = (Set<Plant>[]) new Set[Plant.LifeCycle.values().length];
for (int i = 0; i < plantsByLifeCycle.length; i++) {
    plantsByLifeCycle[i] = new HashSet<>();
}
for (Plant p : garden) {
    plantsByLifeCycle[p.lifeCycle.ordinal()].add(p);
}
// Using an EnumMap to associate data with an enum 
Map<Plant.LifeCycle, Set<Plant>> plantsByLifeCycle = new EnumMap<>(Plant.LifeCycle.class);
for (Plant.LifeCycle lc : Plant.LifeCycle.values()) {
    plantsByLifeCycle.put(lc, new HashSet<>());
}
for (Plant p : garden) {
    plantsByLifeCycle.get(p.lifeCycle).add(p);
}

接着作者还介绍了stream的方式来实现,而且更加优雅。但外观也可能是骗人的,我们需要掌握内部实现的细节。

看作者的代码我就发现stream里面的toMap方法原来可以有4个参数,一般我习惯只是用前面两个参数,map好key和value的值就行,还记得有次就因为我没有使用第三个参数来处理key冲突的问题导致QA报错,但是第四个参数我真的是没有接触过。以后学习代码还是需要多看源码,才能更好的掌握。

相关文章

  • 提示三十七

    提示三十七: 使用 EnumMap 替代序数索引。 ordinal属性是Enum类的私有属性,每个枚举常量类型都会...

  • 提示37

    今天学习有关契约式设计的内容,先看提示: 提示三十七:通过契约进行设计。 作者通过契约引出了契约式设计(DBC)。...

  • 我为亲爱的肝脏代言-37

    【哪些表现提示肝脏细胞损伤】 每日一更(2020.12.28,第三十七期) 第八个表现:眼睛干涩、视力减退等眼部疾...

  • 20181203日

    (三十七) 晴天,满城乱窜。 阳光落叶冬风,枯树枝一样也不少。 前不久收到献血提示,于是今天路过天府广场明星献血屋...

  • 解脱道总结

    37菩提道品 在佛教典藉中,三十七道品又被称为三十七觉支、三十七菩提分,或三十七助道法等,其意思都是一样的。佛教认...

  • 三十七道品析分

    三十七道品 三十七道品有:四念处、四正勤、四如意足、五根、五力、七觉支、八正道,共三十七种。把这三十七道品稍微解释...

  • 枕诗入梦--第五十六首情诗

    “枕诗入梦”第三十七期: 第五十六首情诗(朗诵:微蓝若海) 温馨提示:若打不开朗诵文件,可点击右上角使用浏览器打开...

  • 【缘悟】三十七道品

    三十七道品: 为梵语的意译,又作菩提分、觉支,即为追求智慧,进入“涅槃”境界之三十七种修行方法。 又称三十七觉支、...

  • 【缘悟】三十七道品

    三十七道品: 为梵语的意译,又作菩提分、觉支,即为追求智慧,进入“涅槃”境界之三十七种修行方法。 又称三十七觉支、...

  • 【缘悟】三十七道品

    三十七道品: 为梵语的意译,又作菩提分、觉支,即为追求智慧,进入“涅槃”境界之三十七种修行方法。 又称三十七觉支、...

网友评论

      本文标题:提示三十七

      本文链接:https://www.haomeiwen.com/subject/updtwrtx.html