I really like Tagir's suggestion about (2): Optional<E> findValue(String name)
But this leads me to a question regarding Map... Have you ever considered adding the equivalent default method to the Map interface? It might be something like this: default Optional<V> find(Object key) { return Optional.ofNullable(this.get(key)); } Or maybe not allowing null as a key: default Optional<V> find(Object key) { return Optional.ofNullable(this.get(Objects.requireNonNull(key))); } Of course, this might become ambiguous if the map supports null values, but we have containsKey for that... Regards, fps.- El vie., 7 dic. 2018 a las 11:38, Tagir Valeev (<amae...@gmail.com>) escribió: > As for (2) probably Optional<E> findValue(String name) would be better, as > you may decide what to do if it's absent using all the optional API. > > With best regards, > Tagir Valeev. > > пт, 7 дек. 2018 г., 21:28 Brian Goetz brian.go...@oracle.com: > > > (1) is already tracked as > > > > https://bugs.openjdk.java.net/browse/JDK-8073381 > > > > It is not as "easy" as you think in that these enum methods are > > generated by the compiler, not as ordinary library code, but it's not > > prohibited. > > > > (2) is not unreasonable. As there's no language component to it, you > > could take this directly to corelibs-dev for further evaluation. > > > > On 12/7/2018 9:13 AM, Giguere, Thierry wrote: > > > Hello, > > > > > > Related to the follow link and JEP 301< > https://openjdk.java.net/jeps/301> > > : > > > > > > > > > http://mail.openjdk.java.net/pipermail/amber-spec-experts/2018-December/000876.html > > > > > > What is also missing and long-time due for enum right now and could be > > added quickly is more methods: > > > > > > 1) We need to be able to iterate efficiently on enum. Currently calling > > method T[] values() duplicate the internal array. Moreover you need to go > > through method Arrays.stream() to convert the newly created array to > > stream. Adding a stream() method and a forEach() method would help fix > this > > problem. Optionally a iterator() method could be provided > > > > > > Arrays.stream(MyEnum.values()).forEach(); > > > > > > could be replaced by something like : > > > > > > MyEnum.forEach(); > > > > > > And > > > > > > Arrays.stream(MyEnum.values()).map(... > > > > > > could be written : > > > > > > MyEnum.stream().map(... > > > > > > 2) T valueOfOrDefault : pretty much like getOrDefault of the map > > interface. This method don't throw exception and fallback on default > value. > > That would ease use of enum in stream / lambda programming > > > > > > @Nonnull > > > MyEnum myEnum = MyEnum.DEFAULT_VALUE; > > > > > > try { > > > myEnum = MyEnum.valueOf(...); > > > } catch (NullPointerException | IllegalArgumentException > e) > > { > > > // Just keep going with on the default value > > > } > > > > > > Since exception are thrown it doesn't fit very well in stream / lambda > > usage. Something like this : > > > > > > MyData.stream().map(MyEnum::valueOf).forEach() > > > > > > Must be converted to : > > > > > > MyData.stream().map(d -> { > > > try { > > > return > > MyEnum.valueOf(...); > > > } catch (Exception e) { > > > return > > MyEnum.DEFAULT_VALUE; > > > } > > > }).forEach(); > > > > > > It would be great to write at least something like : > > > > > > MyData.stream().map(d -> MyEnum.valueOfOrDefault(d, > > MyEnum.DEFAULT_VALUE)).forEach(); > > > > > > My feeling is these enhancement could be easily and quickly added > > > > > > Thierry Giguère > > > > > > CONFIDENTIALITÉ : Ce document est destiné uniquement à la personne ou à > > l'entité à qui il est adressé. L'information apparaissant dans ce > document > > est de nature légalement privilégiée et confidentielle. Si vous n'êtes > pas > > le destinataire visé ou la personne chargée de le remettre à son > > destinataire, vous êtes, par la présente, avisé que toute lecture, usage, > > copie ou communication du contenu de ce document est strictement > interdit. > > De plus, vous êtes prié de communiquer avec l'expéditeur sans délai ou > > d'écrire à confidential...@bnc.ca et de détruire ce document > > immédiatement. > > > CONFIDENTIALITY: This document is intended solely for the individual or > > entity to whom it is addressed. The information contained in this > document > > is legally privileged and confidential. If you are not the intended > > recipient or the person responsible for delivering it to the intended > > recipient, you are hereby advised that you are strictly prohibited from > > reading, using, copying or disseminating the contents of this document. > > Please inform the sender immediately or write to confidential...@nbc.ca > > and delete this document immediately. > > > > > > > >