Моя функция принимает сканер и возвращает TreeMap map
со строками в качестве ключей и ArrayList в качестве значения. Эти ArrayLists могут быть разной длины. Я проанализировал сканер для нового ArrayList textData
для упрощения итерации. Процедура должна выглядеть следующим образом:
- Если элемент является строкой, укажите новый ключ для следующей записи TreeMap (сохраненный как
String state
) и очистите временный массив - Если элемент разбирается на Double, добавьте его во временный ArrayList
statePopData
. - Зафиксируйте в
map
.
В идеале, со сканером:
"Utah\t6.0\t60\n"
+ "California\t5\t30\n"
+ "Nevada\t3"
должен вернуться:
{"Utah",[6.0, 60.0], "California",[5.0, 30.0], "Nevada",[3.0],}
Вот что я имею до сих пор:
public static TreeMap<String, ArrayList<Double>> readTable (Scanner dataSource)
{
//Parse Scanner to ArrayList
ArrayList<String> textData = new ArrayList<String>();
while(dataSource.hasNext()){
textData.add(dataSource.next());
}
//Populate TreeMap
ArrayList<Double> statePopData = new ArrayList<>();
TreeMap<String, ArrayList<Double>> map = new TreeMap<>();
for (int i = 0; i < textData.size(); i++) {
boolean isDouble;
String state = "";
try {
Double.parseDouble(textData.get(i));
isDouble = true;
} catch (NumberFormatException | NullPointerException nfe) {
isDouble = false;
}
if(isDouble) {
statePopData.add(Double.parseDouble(textData.get(i)));
} else { //means its a string
statePopData.clear();
state = textData.get(i);
}
if (statePopData.isEmpty()) {
map.put(state, statePopData);
}
} return map;}
Я чувствуюЯ уверен, что с кусочками уверен, но я никогда не смогу выполнить оператор map.put()
в нужное время с правильными значениями для фиксации. Например, мои текущие результаты программы: {California=[3.0], Nevada=[3.0], Utah=[3.0]}
РЕДАКТИРОВАТЬ: Связанный ответ не включает в себя реализацию или полностью отвечает на то, что я пытаюсь сделать.