Консолидация результатов разных дат путем сканирования данных из файла и вывода данных на конкретную дату - PullRequest
0 голосов
/ 04 июня 2018

Я недавно дал интервью с крупнейшим MNC и столкнулся с вопросом кодирования.Это был вопрос, основанный на инвентаризации.Получил файл, который имеет следующие данные:

Дата, название фрукта, количество проданных фруктов, общее количество фруктов.

**2018-06-01,apple,15,25 ;
2018-06-02,apple,13,25 ;
2018-06-03,apple,20,25 ; 
2018-06-01,mango,12,25 ;
2018-06-02,mango,19,25 ;
2018-06-03,mango,20,25 ;
2018-06-01,orange,15,25 ;
2018-06-02,mango,16,25 ;
2018-06-02,orange,14,25 ;
2018-06-03,orange,24,25 ;
2018-06-02,apple,18,25** 

Мне нужно перебрать файл иВ конце распечатать результаты, сколько фруктов продано на 2018-06-02.Ниже приведен код, который я написал

enter code here
public class Inventory {
            public static void main(String[] args) throws IOException {
                FileInputStream geek = new FileInputStream("/Users/preet/Desktop/test2.txt");
                InputStreamReader reader = new InputStreamReader(geek, StandardCharsets.UTF_8);
                BufferedReader in = new BufferedReader(reader);
                List<String> lines = new ArrayList<String>();

                Map<String, Map<String, List<Integer>>> map = new HashMap<String, Map<String, List<Integer>>>();

                Map<String, List<Integer>> map2 = new HashMap<String, List<Integer>>();
                List<Integer> apple = new ArrayList<Integer>();
                List<Integer> mango = new ArrayList<Integer>();
                List<Integer> orange = new ArrayList<Integer>();
                String result = "";
                String line = null;
                String[] input = new String[10];
                int i = 0;
                while ((line = in.readLine()) != null) {
                    input[i] = line;
                    System.out.println("value at " + i + ":" + input[i]);
                    i++;
                }

                for (String a : input) {
                    String b[] = a.split(",");
                    if (b[1].equalsIgnoreCase("apple")) {
                        apple.add(Integer.parseInt(b[2]));
                        map2.put(b[1], apple);
                        map.put(b[0], map2);
                    } else if (b[1].equalsIgnoreCase("orange")) {
                        orange.add(Integer.parseInt(b[2]));
                        map2.put(b[1], orange);
                        map.put(b[0], map2);
                    } else if (b[1].equalsIgnoreCase("mango")) {
                        mango.add(Integer.parseInt(b[2]));
                        map2.put(b[1], mango);
                        map.put(b[0], map2);
                    }
                    if (map.containsKey(b[0])) {
                        Object value1 = map.get(b[0]);
                        map.put(b[0], map2);
                        } else
                        map.put(b[0], map2);
                }
                System.out.println("Fetching Keys and corresponding [Multiple] Values n");
                List<String> results = new ArrayList<String>();
                for (Map.Entry<String, Map<String, List<Integer>>> entry : map.entrySet()) {
                    String orange1 = null;
                    String apple1 = null;
                    String mango1 = null;
                    int a1 = 0;
                    int a2 = 0;
                    int a3 = 0;
                    Map<String, List<Integer>> values = entry.getValue();
                    for (Map.Entry<String, List<Integer>> entry1 : map2.entrySet()) {
                        String key = entry1.getKey();
                        if (key.equalsIgnoreCase("apple")) {
                            List l1 = entry1.getValue();
                            for (int j = 0; j < l1.size(); j++) {
                                a1 = (int) l1.get(j);
                            }
                            apple1 = entry.getKey() + " " + a1 + " apples";
                            results.add(apple1);
                        } else if (key.equalsIgnoreCase("mango")) {
                            List l1 = entry1.getValue();
                            for (int j = 0; j < l1.size(); j++) {
                                a2 = (int) l1.get(j);
                            }
                            mango1 = entry.getKey() + " " + a2 + " mangoes";
                            results.add(mango1);
                        } else if (key.equalsIgnoreCase("orange")) {
                            List l1 = entry1.getValue();
                            for (int j = 0; j < l1.size(); j++) {
                                a3 = (int) l1.get(j);
                            }
                            orange1 = entry.getKey() + " " + a3 + " oranges";
                            results.add(orange1);
                        }
                    }
                     System.out.println("Values = " + (values));
                }
                System.out.println("****" + results);
                  }
        }

1 Ответ

0 голосов
/ 04 июня 2018

Для интервью я бы предложил в качестве первого шага следующее: переберите файл.Разделите каждую строку запятыми, используя String.split().Если элемент 0 полученного массива идентичен 2018-06-02, проанализируйте целое число в элементе 2 (количество проданных фруктов), используя Integer.parseInt(), и добавьте к общему количеству.

Очевидная вещь, отсутствующая в такихпервый выстрел - проверка ввода.Может сначала проверить, что в файле есть хотя бы одна строка.Убедитесь, что каждая строка заканчивается точкой с запятой.Удалите это и любое пространство перед этим перед разделением.Убедитесь, что длина массива равна 4. Используйте один аргумент LocalDate.parse() для анализа даты в каждой строке и Integer.parseInt() для анализа как проданного, так и общего количества.Подтвердите, что проданное количество меньше или равно общему количеству.Можно также проверить, что это имя известного фрукта.

Другая вещь - это моделирование данных.Разработайте класс фруктов с полем имени и классом продажи фруктов, например, с указанием даты, общего количества и проданного числа.

...