Java ArrayLists - 涉及比较

时间:2012-07-25 01:25:51

标签: java

这个我要解释的概念似乎很难讨论,但我会尽量提供尽可能多的细节。

所以有2个班级。其中一个是设置setter和getter的属性,另一个是我主要进行所有比较的文件。

我想要做的比较是在数组中,但要考虑的属性太多。这就是目前的情况:

[[Year, Month, type1, type2, name, $], [Year, Month, type1, type2, name, $], [Year, Month, type1, type2, name, $]]

只有两个是整数,是$和year,其余是字符串。 现在您已经了解了我正在使用的属性,这里有一个小片段,我用它来从Excel中收集这些信息。

ArrayList<customType> workList = new ArrayList<customType>();
 for (int i = start; i <= end; i++) {
     Row r = sheet.getRow(i);
    ArrayList tmp = new ArrayList();
      tmp.setYear((int) row.getCell(0).getNumericCellValue());
      tmp.setMonth(row.getCell(1).getStringCellValue());
      tmp.setType1(row.getCell(2).getStringCellValue());
      tmp.setType2(row.getCell(3).getStringCellValue());
      tmp.setName(row.getCell(4).getStringCellValue());
      tmp.setPrice((int) row.getCell(5).getNumericCellValue());

    workList.add(temp);
 }

好的,所以我在arraylist中有一个可能有500行的列表。它们按照excel的年份和月份排序。

例如:

  • 2010 Dec Game Game Shooter HaloReach $ 45
  • 2010年12月Game Racing Forza $ 60
  • 2010 Dec等等等
  • 2011 Jan等等等
  • 2011 Jan Game Racing Forza $ 60
  • 2011 Jan Game Shooter HaloReach $ 45
  • 2011年2月Game Board Monopoly $ 20
  • 2011年3月等等等
  • 2011年3月等等等
  • 2011年4月Game Shooter HaloReach $ 45

因此,对于HaloReach游戏,您可以看到它在3月和2月缺少一个字段。我想回到列表并添加年,月,类型1,类型2,名称,但是值为$ 0另外,看看大富翁游戏,它不存在未来或现在,我想复制粘贴我列出的每个月都有0美元的东西。

例如:

  • 2010 Dec Game Game Shooter HaloReach $ 45
  • 2010年12月Game Racing Forza $ 60
  • 2010年12月Game Board Monopoly $ 0
  • 2010 Dec等等等
  • 2011 Jan等等等
  • 2011 Jan Game Racing Forza $ 60
  • 2011 Jan Game Shooter HaloReach $ 45
  • 2011年2月Game Racing Forza $ 0
  • 2011年2月Game Shooter HaloReach $ 0
  • 2011年2月Game Board Monopoly $ 20
  • 2011年3月等等等
  • 2011年3月等等等
  • 2011年3月Game Game Forza $ 0
  • 2011 Mar Game Shooter HaloReach $ 0
  • 2011年Mar Game Board Monopoly $ 0

我可以使用散列集吗?我一直在尝试这个,但我无法完成它。我喜欢500行注释代码lol。

我这样做的主要原因是我可以创建另一个arrayList,它将保存前几个月的临时arrayList。例: 此arraylist仅显示当前月份:

  2011 Mar Game Racing Forza [60, 60, 0, 0] <-- from latest to oldest
  2011 Mar Game Shooter HaloReach [45, 0, 45, 45]
  etc.. 

如果名单没有显示在列表中,我想为价格添加0 ..但我想查看当前月份。有更好的方法吗?如果需要,我可以尝试提供更好的解释。

编辑:我没有mysql数据库就完成了。我花了6个多小时。谢谢你的建议。也许下次我会尝试mysql方法。

2 个答案:

答案 0 :(得分:2)

一种更有意义的方法是使用像MySQL这样的真实数据库,您可以使用SQL轻松查询,排序和组织。这将为您想要处理此数据的任何内容提供简单的解决方案。到目前为止,你所选择的道路只会导致疯狂和绝望。

答案 1 :(得分:1)

如果我是你,我会先把我的物品分解得更好。当您将系统分解为更多逻辑组件时 - 他们可以真正开始为您做繁重的工作。请考虑以下事项:

public class Game
{
  private String name;
  private String category;
  private Map<String, Double> pricesByDate;

  // Constructors, getters, setters

  public void addPrice(String monthYear, Double price)
  {
     pricesByDate.put(monthYear, price);
  }

  public Double getPrice(String monthYear)
  {
    // here, let the object do the work for you
    Double price = pricesByDate.get(monthYear);
    return price != null ? price : 0.0;
  }
}

因此,不要担心在任何地方填写0,只需使对象足够聪明,在没有找到数据时报告0。

现在更改解析器以构建游戏列表。