Прохожу тест. В консоль копируется произвольное количество строк, разделенное Enter-ом. Надо получить итоговую таблицу
Kitchen View (java JDK 11) Описание задачи по программированию: A restaurant ordering system accepts food orders one item at a time. Each item entered is for a specific person sitting at a particular table.
The kitchen is not concerned with which person ordered which item. They just need to know what menu items have been ordered for each table.
Write a program that will read a list of individual orders and "pivot" that set into a display of food items for each table in the diner. The total number of each item per table will be displayed on a column for that food item.
For example, the orders:
Sarah,7,Green Salad
Sarah,7,Cappuccino
Michael,2,Club Sandwich
Marcus,5,Sparkling Water
Would be displayed for the kitchen as:
Table,Cappuccino,Club Sandwich,Green Salad,Sparkling Water
2,0,1,0,0
5,0,0,0,1
7,1,0,1,0
Note that the menu items are listed in alphabetical order across the overall list.
Исходные данные: A comma-delimited list of names, table numbers, and menu items.
Результат: A comma-delimited list of table numbers and item counts with a header row as the first line. The first column name is "Table".
Тест 2
Проверить вход
Загрузить исходные данные теста 2
John,11,French Fries
John,11,Soda
Mary,2,Tomato Soup
Mary,2,Grilled Cheese
Tim,2,French Fries
Susan,11,Salad
Susan,11,Sparkling Water
Paul,5,Hamburger
Paul,5,French Fries
Tina,5,Fish Sandwich
Tina,5,French Fries
Susan,5,Hamburger
Susan,5,French Fries
Susan,11,Ice Cream
Jerry,5,Salad
Jerry,5,Ice Cream
Ожидаемый результат
Загрузить исходные данные теста 2
Table,Fish Sandwich,French Fries,Grilled Cheese,Hamburger,Ice Cream,Salad,Soda,Sparkling Water,Tomato Soup
2,0,1,1,0,0,0,0,0,1
5,1,3,0,2,1,1,0,0,0
11,0,1,0,0,1,1,1,1,0
я написал следующий код
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
public class OrderRestaurant {
public static void main(String[] args) throws IOException {
InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
BufferedReader in = new BufferedReader(reader);
String line;
TreeMap<String, LinkedList<Integer>> orderMap = new TreeMap<String, LinkedList<Integer>>();
Set<Integer> tableSet = new TreeSet<Integer>();
while ((line = in.readLine()) != (null) || (line = in.readLine()) != (" ")
) {
String[] orders = line.split(",");
// if(orders.length != 3) {
// tableSet.clear();
// orderMap = null;
// }
for (int i = 0; i < orders.length; i++) {
tableSet.add(Integer.parseInt(orders[1]));
}
if (!(orderMap.containsKey(orders[2]))) {
LinkedList<Integer> numbersTables = new LinkedList<>();
numbersTables.add(Integer.parseInt(orders[1]));
orderMap.put(orders[2], numbersTables);
} else {
orderMap.get(orders[2]).addLast(Integer.parseInt(orders[1]));
}
StringBuilder sBuilder = new StringBuilder("Table");
Set<String>keysOrderMapSet=orderMap.keySet();
for (String keyString : keysOrderMapSet) {
sBuilder.append(',').append(keyString);
}
for(Integer key : tableSet){
sBuilder.append("\n").append(key);
for(Map.Entry<String, LinkedList<Integer>> entry : orderMap.entrySet())
{
LinkedList<Integer> numbersOrder = entry.getValue();
int counterOrder = 0;
for (int i = 0; i < numbersOrder.size(); i++) {
if(numbersOrder.get(i)==key) {
counterOrder++;
}
}
sBuilder.append(',').append(counterOrder);
}
}
System.out.println(sBuilder.toString());
}
}
}
но есть проблема: строки теста разделены "Enter". Вводится текст целиком сразу одним "Enter"
при построчном считывании получаются промежуточные таблицы и так как я не могу сообщить об окончании теста после вывода итоговой таблицы информация не очищается. И последующий тест накладывается на предыдущий.
есть ли способ повесить таймер, типа setTimeout (как в JS) , чтобы я отдельно собирал информацию и отдельно обрабатывал, выводил и очищал. Или здесь нужно применить новый метод типа Stream lines()
или JDK 11 написан для отвлечения внимания и есть старый и добрый способ, неизвестный мне?