【问题标题】:Any collection object to hold list of combination of more than 2 elements?任何集合对象来保存超过 2 个元素的组合列表?
【发布时间】:2013-07-06 22:53:12
【问题描述】:

是否有集合对象或方法来保存元素的组合?

例如,我需要创建一个列表,其中包含元素名称、年龄、身高和体重的组合。

在我的情况下,为此创建一个对象不是一个好主意。因为字段的数量不断变化。 我需要创建此列表以传递给查询。

有什么办法吗?

【问题讨论】:

  • 姓名、年龄、身高、体重的元素数量在变化?是什么让它们发生如此剧烈的变化,使得列表中的列表或安静灵活的类的任何组合都无法存储所有这些元素和蜜蜂以及填充在列表中的东西?由于您排除了对象列表,因此恐怕有更多关于您尝试编写代码以做出实际建议的信息。
  • 是的,有时可能是 3、4 甚至 2。所以并不总是 4 个元素。
  • 那么下一个问题是你希望你用这些元素做什么。意味着您打算如何处理它们以供进一步使用。是否有任何理由反对充满地图的列表(或您喜欢的任何集合),因此您将尝试存储的信息用作关键信息并重视实际信息。即使我更愿意为最大数量的元素创建一个带有变量的类,并使用 null 或空字符串或任何你喜欢的东西,请注意这个属性不适用于相关人员。
  • 我需要使用该元素组合构建查询。
  • 好吧,我想你总是可以使用 List> ,然后结合使用 instanceOf 或 getClass 和 switch case,随意使用这些内容。但我不认为那种代码会太漂亮。

标签: java arrays list collections elements


【解决方案1】:
class MyContainer {
  String someString;
  int someInt;
}

List <MyContainer> myList = new List<>();

类似的东西!?

我不确切知道,“在我的情况下为此创建对象不是一个好主意”是什么意思。作为替代方案,您可以创建一个 List&lt;Object&gt; 并放入您拥有的任何内容,如果您想要一个包含多个分组对象的列表,甚至可以放入 List&lt;List&lt;Object&gt;&gt;

【讨论】:

  • 有时我需要 3 个元素,或者像这样的 4 个元素。
  • 只有多个不同的元素?然后使用 List!或者类似List的东西,有各种...
  • 你如何保存 List 之类的东西?
  • 您将使用 List> 但例如在查询属于哪个时您不会知道(例如,int 可以是年龄或身高)。最好的办法是像@luk2302 建议的那样,只创建一个对象,并允许某些字段在不需要时为空。
  • 另一种方法是创建一个 List> 并在每个元素之前指定它的类型,例如“String”、“hi”、“int”、7、“float” ", 3.145f 或 String, "hi", Integer, 7, Float, 3.145f - 但这既不漂亮也不有效。
【解决方案2】:

最好的方法是制作一个包含所有可能元素的对象。

class myObject {
     String name;
     Integer age;
     Float weight; 
     // Etc
}

或者有一个基类,然后有另一个类,用其他元素扩展它

class myExtendedObject extends myObject{
     String streetAddress;
     String city;
     // etc;
}

然后,如果您没有将元素设置为 null...您始终可以通过包含返回查询的方法从对象本身构建查询,只需检查它是否为 null 并且不包含在您的查询中(假设您的意思是 sql 样式查询)

public String buildQuery{
     String query = "Select * from blahtable Where ";
     query += (name != null)?" name = " + name : "";

     // etc, or what ever your query needs to be
     return query
}

否则,您可以只使用一个返回元素映射的方法,然后您就可以根据键知道每个元素的类型

 public Map<String, Object> getElements{
      Map<String, Object> myMap = new HashMap<String, Object>();
      if(name != null)
         myMap.put("Name", name);

      // etc
      return myMap
 }

【讨论】:

    【解决方案3】:

    仅使用 Map 并使用属性名称作为键(例如 Weight )怎么样? 你可以使用任何你想要的属性组合,将这样的集合传递给查询会很方便

    如果您需要更多列名类型安全性,请考虑 Enum map

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多