【问题标题】:Choosing best suitable data type from the list of data types从数据类型列表中选择最合适的数据类型
【发布时间】:2021-10-06 18:33:04
【问题描述】:

鉴于['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") && input.stream().allMatch(t -> map.get("long").contains(t)))
    return "long";
  else if(..int..)
    return "int";
  .
  .
  .
  else
    return "string";

}

基本上构建一个数据类型映射到它可以支持的所有可能的数据类型。 并按照input中long, int, short的顺序手动检查,并使用map检查是否支持input中的所有数据类型并返回相应的类型。

但我对这种方法并不满意。所以寻找解决这个问题的最佳方法。

谢谢。

【问题讨论】:

  • 您需要说明您对这种方法不满意的原因。

标签: java oop design-patterns enums


【解决方案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) 内完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 2011-07-26
    • 2012-02-29
    • 2021-05-12
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多