如何在文本文件中的两个日期之间进行搜索?哈希地图?

时间:2013-11-26 17:07:47

标签: java file text hashmap

例如,我有以下文件

B 01-02-2013 1233 
B 03-02-2013 129
B 04-02-2013 13

日期从用户输入存储为String。下一个数字是“CaloriesBurnt”的整数

如果给出开始日期和结束日期,我想要。计算在这两个日期之间燃烧的总卡路里。所以例如在这里我想要总计从01-02-2013到04-02-2013的卡路里。所以我需要在那个时期之间拉出日期的卡路里。我知道我必须转换为日期格式,然后可能使用HASP MAP?订购??任何帮助真的很感激

3 个答案:

答案 0 :(得分:4)

在这种情况下,最好的数据结构是TreeMap。它维护其键的排序,并且methods returning a "submap"包含两个键值之间的所有条目。

如果每个日期都是唯一的,您可以使用TreeMap<Date, Record>。如果没有,那么使用TreeMap<Date, List<Record>>(记录是用于保存文件一行所有元素的类)。

一旦你有了子图,你只需要迭代所有的值并加总他们的卡路里。

答案 1 :(得分:1)

您可能希望使用类似SortedMap<Date, UserData>的排序集合(UserData表示您要在地图中存储的任何数据),然后使用subMap(startDate, endDate + 1 day)提取句点。请注意,由于上限是独占的,因此需要endDate + 1 day

示例:

SortedMap<Date, Integer> caloriesByDate = new TreeMap<>(); //we only store the calories

... //fill here

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
//get entries in the interval `[01-02-2013,03-02-2013]`.
caloriesByDate.subMap( f.parse("01-02-2013"), f.parse("04-02-2013") ); 

答案 2 :(得分:1)

首先,我将整个文本文件解析为对象。无论日期如何。文本文件中的每一行都可以是这样的(当然有setter和getter以及public / private和所有这些东西;):

class Entry {
    Date date;
    int calories;
}

解析文本文件并创建此类对象的列表。然后你可以在这个列表上操作。您可以对它进行排序(使用您编写的分拣机对象),您可以搜索它或执行您想要的任何操作。一旦你摆脱了实际的文本文件并且你有了对象,它就变得容易了。您甚至可以使用某些第三方库轻松计算统计数据(例如平均值,最大值或类似值)。