Комплексная печать заявления - PullRequest
0 голосов
/ 25 апреля 2019

Пока что у меня есть:

Каталог, содержащий две папки:

  1. .. \ Data \ BeforeModern

  2. .. \ Data \ AfterModern

Каждая папка (BeforeModern и AfterModern) содержит 4 JSON-файла ( AU, UK, US, IND );

Файл Json содержит определенное имя поля (язык), которое меня интересует.

например, в AU JSON в BeforeModern lang равен

Language["English","Spanish"]

в AFterModern lang это что-то вроде этого:

Language["English","Spanish","Arabic"]

Я хочу напечатать результат, как показано ниже:

         **BeforeModern**            **AfterModern**
            English                     English
AU :        Spanish                     Spanish
                                        Urdu

Мой подход до сих пор:

for (File beforeFile: new File(locationPath).listFiles()) {
            File afterFile= new File(locationPath.replace("BeforeModern", "AfterModern") + "\\" + locFile.getName());

            if (afterfile.exists()) {
                ObjectMapper mapper = new ObjectMapper();
                JsonNode tree1 = mapper.readTree(beforeFile); //Parse Specific JSON from BeforeModern Location
                JsonNode tree2 = mapper.readTree(afterFile); //Parse Specific JSON from AfterModern Location
                if (tree1.has("Language") && tree2.has("Language")) {
                    JsonNode sup_loc = tree1.get("Language");
                    List<String> list1 = new ArrayList<>();
                    sup_loc.forEach(l -> list1.add(l.asText()));
                    JsonNode sup_rent = tree2.get("Language");
                    List<String> list2 = new ArrayList<>();
                    sup_rent.forEach(l -> list2.add(l.asText()));
                    int rows = Math.max(list1.size(), list2.size());


                    Map<String, String> hash= new HashMap<>();
                    for (int i=0;i<rows;i++){
                        hash.put(list1.get(i),list2.get(i));
                    }
                    Map<String,Map<String,String>> map = new HashMap<>();
                    map.put(beforeFile.getName(),hash);
                    map.entrySet().forEach((k)->System.out.println(k.getKey()+"                                                "+k.getValue()));
                    //hash.entrySet().forEach((k)->System.out.println(k.getKey()+"                         "+k.getValue()));
                    System.out.println("________________________________________________________________________________");

1 Ответ

1 голос
/ 25 апреля 2019

Чтобы напечатать AU : в средней строке списка языков, необходимо рассчитать индекс средней строки.

Для того чтобы напечатать два списка имен языков в виде столбцов, вам необходимо найти длину самого длинного имени языка в первом столбце, заголовок которого равен **BeforeModern**. Затем вы можете использовать метод printf() класса PrintStream, чтобы убедиться, что список **AfterModern** также отображается в виде столбца. В приведенном ниже фрагменте кода longest - это int, представляющий длину самого длинного имени языка, а before - это String, содержащее имя языка в первом столбце, а after - это String, представляющее название соответствующего языка во втором столбце.

System.out.printf("%-" + longest + "s  %s%n", before, after); 

И распечатайте списки с помощью цикла, чтобы вы знали, когда печатать AU :. В приведенном ниже коде maxLines - это int, которое представляет собой число элементов в большем из двух списков названий языков, а middle - это int, содержащее индекс строки, в которой AU : необходимо быть напечатанным.

for (int i = 0; i < maxLines; i++) {
    if (middle == i) {
        System.out.print("AU : ");
    }
    else {
        System.out.print("     ");
    }
}
...