Я пытаюсь преобразовать код python, предоставленный нашим инструктором, в эквивалентный код Java.Эта часть кода должна считывать из txt-файла, анализировать данные с помощью регулярных выражений и сохранять их как массив слов.Ограничением для этого упражнения является то, что «data_storage_obj» используется для имитации объекта JavaScript, и мы должны держать их в этом формате ключ-значение.
Инструкция указывает, что структура данных в Java, которая является ближайшей кОбъект JavaScript - это «HashMap».Однако, поскольку каждый ключ сопоставляется с отдельной структурой данных для хранения соответствующей информации, лучшим типом, который я могу себе представить, является «Объект».Однако один из ключей сопоставляется с лямбда-функцией, поэтому я получаю это сообщение об ошибке, в котором говорится: «ошибка: несовместимые типы: объект не является функциональным интерфейсом».Мне интересно, какой тип я должен использовать, чтобы охватить все типы, которые я собираюсь сохранить в качестве значений карты.
Фрагмент кода, предоставленного инструктором:
def extract_words(obj, path_to_file):
with open(path_to_file) as f:
obj['data'] = f.read()
pattern = re.compile('[\W_]+')
data_str = ''.join(pattern.sub(' ', obj['data']).lower())
obj['data'] = data_str.split()
data_storage_obj = {
'data' : [],
'init' : lambda path_to_file : extract_words(data_storage_obj, path_to_file),
'words' : lambda : data_storage_obj['data']
}
data_storage_obj['init'](sys.argv[1])
Javaкод, над которым я работал:
public class Twelve{
static void extract_words(Object obj, String path_to_file){
System.out.println("extract_words()");
if(obj instanceof HashMap){
HashMap<String, Object> hashMap = (HashMap<String, Object>) obj;
String file_data = "";
try {
file_data = (new String(Files.readAllBytes(Paths.get(path_to_file)))).replaceAll("[\\W_]+", " ").toLowerCase();
} catch (IOException e) {
e.printStackTrace();
}
hashMap.put("data", Arrays.asList(file_data.split(" ")));
obj = hashMap;
}
}
static HashMap<String, Object> data_storage_obj = new HashMap<>();
public static void main(String[] args){
ArrayList<String> data = new ArrayList<String>();
data_storage_obj.put("data", data);
data_storage_obj.put("init", path_to_file -> extract_words(data_storage_obj, path_to_file));
data_storage_obj.put("words", data_storage_obj.get("data"));
}
}