import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class Some {
public static final String FIELDS_DELIMITER = ";";
public static final String KEY_VALUE_DELIMITER = "=";
public static void main(String[] args) throws IOException {
readInputStream(new FileInputStream("test.csv"));
}
public static void readInputStream(InputStream in) throws IOException {
BufferedReader br;
String line;
Map<GroupKey, Integer> groupedValues = new HashMap<GroupKey, Integer>();
try {
br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
while ((line = br.readLine()) != null) {
String[] fields = line.split(FIELDS_DELIMITER);
HashMap<String, String> fieldsValues = new HashMap<String, String>();
for (String field : fields) {
String[] keyAndValue = field.split(KEY_VALUE_DELIMITER);
fieldsValues.put(keyAndValue[0], keyAndValue[1]);
}
GroupKey gk = new GroupKey();
gk.id = fieldsValues.get("ID");
gk.date = fieldsValues.get("DATE");
if (!groupedValues.containsKey(gk)) {
groupedValues.put(gk, 0);
}
Integer fieldAvg = Integer.valueOf(fieldsValues.get("AVG"));
groupedValues.put(gk, groupedValues.get(gk) + fieldAvg);
}
br.close();
for (Map.Entry<GroupKey, Integer> groupKeyAndSum : groupedValues.entrySet()) {
GroupKey gk = groupKeyAndSum.getKey();
Integer sum = groupKeyAndSum.getValue();
System.out.println("ID " + gk.id + ", date " + gk.date + ": " + sum);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static class GroupKey {
private String date;
private String id;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GroupKey groupKey = (GroupKey) o;
return !(date != null ? !date.equals(groupKey.date) : groupKey.date != null) &&
!(id != null ? !id.equals(groupKey.id) : groupKey.id != null);
}
@Override
public int hashCode() {
int result = date != null ? date.hashCode() : 0;
result = 31 * result + (id != null ? id.hashCode() : 0);
return result;
}
}
}