Большая часть задачи выполнена с помощью существующего метода ourFileReaderToList () , вам просто нужно немного изменить его, чтобы он соответствовал HashMap и суммировать строки файла по мере ихчитаются в. Тип возврата для вашего метода, конечно, должен быть HashMap , и потому что вы хотите, чтобы Key был номером строки файла и значениемдля того, чтобы каждый ключ был фактической строкой строки файла, читаемой в данный момент, ваш тип возвращаемого значения должен быть: HashMap<Integer, String>
:
public static HashMap<Integer, String> ourFileReaderToList(String fileToRead) throws FileNotFoundException {
Поскольку вы больше не собираетесь использовать Список Интерфейс в вашем методе, вы можете пойти дальше и изменить его на свой тип возврата:
HashMap<Integer, String> poemLines = new HashMap<>();
Вот как может выглядеть ваш File To HashMap метод:
public static HashMap<Integer, String> fileToHashMap(String fileToRead) throws FileNotFoundException {
Scanner reader = new Scanner(new File(fileToRead));
int lineCount = 0;
HashMap<Integer, String> poemLines = new HashMap<>();
try {
while (reader.hasNextLine()) {
lineCount++;
String fileLine = reader.nextLine();
// If you do not want to add blank lines to the
// collection then uncomment the following lines;
/*
if (fileLine.trim().equals("")) {
continue;
}
*/
poemLines.put(lineCount, fileLine); // Add to Collection
}
}
finally {
reader.close();
}
return poemLines;
}
Теперь, когда у вас есть коллекция в HashMap, вы можете приступить к ее печати на основе полномочий 2. Я полагаю, что это означает, что сначала будет напечатана строка данных 2, затем строка данных 4, затем строка 8, строка16, 32, 64, 128 и т. Д.,и т. д. .... до тех пор, пока значение Powers Of не станет больше, чем доступное количество строк файла, содержащихся в коллекции (это, конечно, если вы имеете в виду степеней 2 ),Вот как это можно сделать:
public static void writeHashmapToFile(String fileToWrite, HashMap<Integer, String> hashmapToWrite) throws IOException {
// Using 'Try With Resources'.
try (BufferedWriter bw = new BufferedWriter(new FileWriter(fileToWrite))) {
int powersOf2 = 2;
StringBuilder sb;
for (Object objectName : hashmapToWrite.keySet()) {
int key = (int) objectName;
String line = hashmapToWrite.get(key);
//System.out.println(key + "\t" + line);
if (key == powersOf2) {
sb = new StringBuilder();
sb.append(key).append("\t").append(line).append(System.lineSeparator());
bw.write(sb.toString());
powersOf2 *= 2; // Same as: powersOf2 = powersOf2 * 2
}
}
}
}