|
|
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
Дано: есть база, в ней сущности, у сущностей айдентити (BigInteger). Есть Enum из нескольких из этих сущностей Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Есть код который как исходные данные имеет один из этих айдишников и я хочу этот айдишник превратить в инстанс енама чтоб дальше работать с ним. Вопрос 1)какие способы сделать это есть кроме итерации по values() в поисках нужного айдишника? 2)Читал про valueOf в контексте MyBigIntEnum.valueOf("THREE") но так и не понял зачем оно надо - сугубо для случаев когда имя енама совпадает с идентификатором во внешнем коде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 14:33 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
Марс1)какие способы сделать это есть кроме итерации по values() в поисках нужного айдишника? если id совпадает с порядковым номером соотв. энума (ordinal), то можно по нему, но это очень порочный подход. однажды кто-то отсортирует энумы или поменяет id по-другому и приплыли. пробегать по values - единственно верный способ. что смущает то, один for написать? Марс2)Читал про valueOf в контексте MyBigIntEnum.valueOf("THREE") но так и не понял зачем оно надоесли у тебя в базе или коде каким-то чудом строковое представление этих значений. короче всегда, когда они приходят из такого места, где у тебя нет контроля над форматом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 15:10 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
авторчто смущает то, один for написать Ну думал может что то покрасивше есть, всё-таки кейс не очень редкий. Потом подумал что это правильно потому что позволяет поиск по нескольким ключам авторкороче всегда, когда они приходят из такого места, где у тебя нет контроля над форматом. Не понял - если у меня нет контроля над форматом то как получится что пришедшие значения будут 1 в 1 совпадать с названиями в enum - это кажется лишь чуть менее порочным чем завязываться на порядок значений в енаме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 16:49 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
МарсНе понял - если у меня нет контроля над форматом то как получится что пришедшие значения будут 1 в 1 совпадать с названиями в enum ну энум-то ты создаешь, делаешь так, что значения соответствуют тому, что тебе выплевывает, например, веб-сервис. Марс - это кажется лишь чуть менее порочным чем завязываться на порядок значений в енаме. в принципе да, но выбора особого нет, получаешь на руки список строковых констант, дальше как хочешь. единственное, что строго нужно учесть, чтоб софтина не валилась, если в будущем наткнется на незнакомое значение. p.s. в принципе если есть роскошь юзать java 7+, то энум может и не нужен, если все его применение ограничивается switch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2015, 17:14 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
Марс, c Google Guava Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2015, 10:27 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
МарсНу думал может что то покрасивше есть Если есть дырки, то Двоичный поиск вестимо. Можно еще и не пополам делить ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 15:41 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевМожно еще и не пополам делить ... что, все три значения :) ? если в энуме больше десятка элементов, то что-то сильно не так в консерватории. а если меньше, то о каком бинарном поиске и хэшмэпах может идти речь? я думаю автора вопроса волновала эстетическая сторона реализации, а не просадки в производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2015, 18:39 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
chpasha, Если мы говорим про три элемента, то хватит одного switch(TWO.compareTo(...)) (вот и весь двоичный поиск), сомневаюсь, что этот вариант сильно просадит производительность по сравнению с for(...). Но эстетика -великая сила, на вкус и цвет у всех помидоры разные. По поводу количества элементов в enum - то если используется BigInteger, то видать неспроста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 16:30 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев По поводу количества элементов в enum - то если используется BigInteger, то видать неспроста. причина весьма банальна, цитирую авторесть база, в ней сущности, у сущностей айдентити (BigInteger). Есть Enum из нескольких из этих сущностей так что в энуме мог бы быть byte, а не BigInteger, автор просто хочет избежать приведения типов, вряд ли он хранит энумы количеством более Integer.MAX_VALUE ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 16:56 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
chpasha, Ну и где будет просадка производительности? На 3х элементах (с вариантом поиска по левому id) - полный перебор - 1-3 equals двоичный поиск - switch(compareTo()) и возможно equals На 10 элементах полный перебор - 1-10 equals двоичный поиск - 1-2 switch(compareTo()) и 0-2 equals Просто не надо считать, что двоичный поиск это меганавороченный алгоритм. Нам же не надо сортировать enum - это можно сделать заранее (до компиляции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 17:35 |
|
||
|
Как выбрать Enum
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Ну и где будет просадка производительности? скорее всего в нигде, если метод не вызывается миллион раз в цикле. Сергей АрсеньевПросто не надо считать, что двоичный поиск это меганавороченный алгоритм просто не надо а) заниматься преждевременной оптимизацией б) писать трудно читаемый код в угоду этой преждевременной оптимизации. Сергей Арсеньев. Нам же не надо сортировать enum - это можно сделать заранее (до компиляции). еще раз, мы сейчас на полном серьезе обсуждаем ручную сортировку и бинарный поиск по 3 элементам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 18:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38873650&tid=2125831]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 516ms |

| 0 / 0 |
