Я хотел бы заполнить карту строкой в качестве ключа и строкой в качестве значения, мой код:
private Map<String,Row> getMapFromDataset(Dataset<Row> dataset, List<String> mapColumns) {
Map<String, Row> map = new HashMap<>();
dataset.foreach((ForeachFunction<Row>) row ->
map.put(getKey(mapColumns,row),row) //This works
);
return map; //Map is empty when returning!
}
Мой метод getKey () (хотя я думаю, что это не является причиной проблемы):
private String getKey(List<String> mapColumns, Row row) {
StringBuffer sb = new StringBuffer(256);
for(String col : mapColumns){
sb.append((String)row.getAs(col));
}
return sb.toString();
}
Несмотря на то, что карта компилируется и запускается без ошибок, карта всегда пуста.
Что я заметил, так это то, что если я проверяю размер карты сразу после первой вставки,Карта имеет размер 1, поэтому вставка элементов работает, но возвращаемая карта пуста
Я также читал, что переменные, используемые в лямбда-выражениях, должны быть окончательными, это может объяснить проблему. Любой намек?