Как проверить (сравнить на одинаковость) два массива и вывести CSV-файл в качестве результатов JAVA

У меня есть два массива (открытых для работы с другими коллекциями), и мне нужно вывести файл csv, который определяет, одинаково ли содержимое этих массивов; ячейка за ячейкой сравнение по существу. Массивы берутся из результирующего набора и сортируются. Они выглядят так:

sourceData = (9, Орландо, 28 февраля 668 г., Ллойдтаун, 1 декабря и т. д.)

targetData = (9, Каледон, 19 января, 38, Саут-Харк, 1 декабря и т. д.)

Я попытался взять первое значение первого списка массивов, первое значение второго списка массивов, а затем сравнить их и напечатать в файл CVS.

for (int i = 0; i <sizeOfData; i++) {
   if (sourceData.get(i).equals(targetData.get(i))){
        validator = ("True");
    } else {
        validator = ("False");
    }
    csvFilePrinter.printRecord(sourceData.get(i), targetData.get(i), validator);
   }

Вывод выглядит так, как хотелось бы:

9, 9, true

Однако мне нужна следующая строка в файле CSV для отображения:

 668, 38, false

так что общая схема такая:

 9, 9, true, Orlando, Caledon, false, Feb 28, Jan 19, false

 668, 38, false, Lloydtown, South Hark, false, Dec 1, Dec 1, true

где, как только я поместил заголовки и сказал, что второй столбец - «город», в столбце 2 будут отображаться только значения города.

Я пробовал каждый способ записи, но формат CSV-файла неверен, так как каждый раз, когда я использую csvFilePrinter, он записывает в следующую строку. Как написать в следующую колонку? Когда я помещаю то, что хочу, в одну строку массива, я могу заставить это работать, но мои наборы результатов каждый раз будут разными, поэтому я не могу жестко указать, сколько столбцов мне понадобится. Как вы можете писать по строке, а не вниз по столбцу при записи в файл CVS?

Я не вижу решения моей проблемы ни в одном из связанных сообщений...


person Max B    schedule 14.08.2017    source источник
comment
Не уверен, что правильно понял. Вы хотите это сравнение в одну строку? CSV — это просто файл, разделенный запятыми, поэтому вы можете просто написать строку, разделенную запятыми, в файле и сохранить ее с расширением .csv. А что такое csvFilePrinter - класс, библиотека?   -  person Sergei Sirik    schedule 14.08.2017
comment
возможно, сначала создайте результаты, а затем распечатайте их. Список‹Список‹Строка› результатов; а затем для (List‹String› row: results ) {csvFilePrinter.printRecord(row);}   -  person John Tribe    schedule 14.08.2017


Ответы (1)


csvFilePrinter.printRecord, кажется, печатает полную запись. В этом случае он должен быть вне цикла. Лучше сослаться, CSVPrinter Он также может печатать Iterable, поэтому он может печатать ArrayList, и требуемое решение может быть таким, как показано ниже.

List<String> requiredOutput = new ArrayList<>();
Strin validator = "False";
for (int i = 0; i <sizeOfData; i++) {
   if (sourceData.get(i).equals(targetData.get(i))){
        validator = ("True");
    } else {
        validator = ("False");
    }
    requiredOutput.add(sourceData.get(i));
    requiredOutput.add(targetData.get(i));
    requiredOutput.add(validator);
}
csvFilePrinter.printRecord(requiredOutput);
person Narendran Solai Sridharan    schedule 14.08.2017
comment
Спасибо, это поставило меня на правильный путь. Я написал еще один цикл для итерации по строке и очистил переменную requiredOutput перед переходом к следующей строке. - person Max B; 15.08.2017