【发布时间】:2015-07-14 12:05:12
【问题描述】:
我有一个ArrayList<String>,其中包含以字符串形式表示的日期,格式为yyyy-MM-dd,例如:
ArrayList<String> dates = new ArrayList<>();
dates.add("1991-02-28");
dates.add("1991-02-28");
dates.add("1994-02-21");
我想知道相同String(日期)出现在列表中的次数。在上面的示例中,我想实现以下输出:
1991-02-28, 2
1994-02-21, 1
我试过下面的代码
ArrayList<String> dates = new ArrayList<>();
dates.add("1991-02-28");
dates.add("1991-02-28");
dates.add("1994-02-21");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
HashMap<String, String> dateCount = new HashMap<String, String>();
String first = dates.get(0);
int count = 1;
dateCount.put(first, String.valueOf(count));
for (int i = 1; i < dates.size(); i++) {
if (first.equals(dates.get(i))) {
count++;
} else {
first = dates.get(i);
dateCount.put(dates.get(i), String.valueOf(count));
count = 0;
}
}
for (String date : dates) {
String occ = dateCount.get(date);
System.out.println(date + ", " + occ);
}
但它会打印出来
1991-02-28, 1
1991-02-28, 1
1994-02-21, 2
我累了,卡住了,最后求助于 SO。任何帮助表示赞赏。
【问题讨论】:
-
我的问题可能表述得很糟糕。我想打印的是
1991-02-28, 2和1994-02-21, 1@AmirAfghani -
我现在看到你的编辑了。所以,实际上这是一个 groupBy 操作。您使用的是 Java 8 吗? Guava 也有一个方法可以为你做到这一点..
-
准确地说,groupBy 会解决它。不幸的是,我目前正在使用 Java 7。@AmirAfghani