我试图将简单的输出写入文件,但我输错了输出。这是我的代码:
Map<Integer,List<Client>> hashMapClients = new HashMap<>();
hashMapClients = clients.stream().collect(Collectors.groupingBy(Client::getDay));
Map<Integer,List<Transaction>> hasMapTransactions = new HashMap<>();
hasMapTransactions = transactions.stream().collect(Collectors.groupingBy(Transaction::getDay));
//DAYS
String data;
for (Integer key: hashMapClients.keySet()) {
data = key + " | ";
for (int i = 0; i <hashMapClients.get(key).size();i++) {
data += hashMapClients.get(key).get(i).getType() + " | " + hashMapClients.get(key).get(i).getAmountOfClients() + ", ";
writer.println(data);
}
}
我得到了这个输出
1 |个人| 0,
1 |个人| 0,公司| 0,
2 |个人| 0,
2 |个人| 0,公司| 0,
但它应该是,如果它是最后一个,它也不应该结束。
1 |个人| 0,公司| 0
2 |个人| 0,公司 | 0
我做错了什么?
答案 0 :(得分:2)
听起来您只想将data
写入外部循环中的输出,而不是内部循环。后者仅用于构建要写入的data
值。像这样:
String data;
for (Integer key: hashMapClients.keySet()) {
// initialize the value
data = key + " | ";
// build the value
for (int i = 0; i <hashMapClients.get(key).size();i++) {
data += hashMapClients.get(key).get(i).getType() + " | " + hashMapClients.get(key).get(i).getAmountOfClients() + ", ";
}
// write the value
writer.println(data);
}
编辑:感谢您指出最后一个字符仍然需要删除。没有更多的错误检查,可能就像:
一样简单data = data.substring(0, data.length() - 1);
您可以根据逻辑需要添加错误检查,也许确认最后一个字符确实是逗号或确认内部循环至少执行一次,等等。
答案 1 :(得分:0)
一个问题是你在每println
之后调用Client
,而不是等到整个列表构建完毕。然后,要使用尾随逗号修复问题,您可以使用joining collector.
Map<Integer,List<Client>> clientsByDay = clients.stream()
.collect(Collectors.groupingBy(Client::getDay));
/* Iterate over key-value pairs */
for (Map.Entry<Integer, List<Client>> e : clientsByDay) {
/* Print the key */
writer.print(e.getKey());
/* Print a separator */
writer.print(" | ");
/* Print the value */
writer.println(e.getValue().stream()
/* Convert each Client to a String in the desired format */
.map(c -> c.getType() + " | " + c.getAmountOfClients())
/* Join the clients together in a comma-separated list */
.collect(Collectors.joining(", ")));
}