Выбор наиболее подходящего типа данных из списка типов данных

#java #oop #design-patterns #enums

Вопрос:

Учитывая список типов данных , например ['long', 'int', 'short'] , как выбрать наиболее подходящий тип данных, который может обрабатывать любое значение любого из заданных типов?

В этом случае лучшим типом данных является long . Так что возвращайся long . У меня уже есть способ(грубая сила) , но я ищу правильный способ справиться с этим. Предложите мне лучший подходящий дизайн.

Ниже приведено мое текущее решение:

 static Map<String, List<String>> map = new HashMap<>();
static {
  map.add("long", Lists.newArrayList("long", "int", "short", "byte"));
  map.add("int", Lists.newArrayList("int", "short", "byte"));
  .
  .
}

public void String suitableDataType(List<String> input) {
  if (input.contains("long") amp;amp; input.stream().allMatch(t -> map.get("long").contains(t)))
    return "long";
  else if(..int..)
    return "int";
  .
  .
  .
  else
    return "string";

}
 

В основном создайте карту типа данных для всех возможных типов данных, которые он может поддерживать.
И проверьте вручную в порядке long, int, short внутри input , а также проверьте, поддерживаются ли все типы данных внутри input с помощью карты, и верните соответствующий тип.

Но меня такой подход не устраивает. Поэтому мы ищем лучший способ решить эту проблему.

Спасибо.

Комментарии:

1. Вам нужно уточнить, почему вас не устраивает такой подход.

Ответ №1:

Я думал, что перечисление может быть полезным, но вы можете использовать другой подход, например, карту. Дело в том, чтобы с каждым типом было связано числовое значение.

Я думаю, что переименовал метод и изменил тип возвращаемого значения … пожалуйста, рассмотрите только концепцию

    private enum TYPE {
        LONG, INT, SHORT, BYTE;
    }

   private static void examine(List<String> input){
    TYPE type = TYPE.LONG;
        for (String key : input) {
            switch(key){
                case "byte":
                    System.out.print("byte"); 
                    return;
                default: 
                    type = type.ordinal() < TYPE.valueOf(key.toUpperCase()).ordinal() ? TYPE.valueOf(key.toUpperCase()) : type;
                    break;
            }
        }
        System.out.println(type);
    }

 

Вы рассмотрели «строку» как значение по умолчанию; в моем примере я использовал вместо этого «байт», но и в этом случае главное-логика. Как только вы установите иерархию типов данных, все станет следствием.

В худшем случае все делается в O(n).