Получить индекс значения

1

У меня есть такой ввод.

0 Overcast Yes  4
0 Rainy Yes 3
0 Sunny No  3
1 Cool No   1
1 Cool Yes  3

Я пытаюсь сохранить эти данные в Hashmap

{0=[Overcast Yes 4,Rainy Yes    3,Sunny No  3]}
{1=[Cool No 1,Cool Yes  3]}

Пока что я сделал

        Map<String, List<String>> mapPart = new HashMap<String, List<String>>();
        List<String> tmpList = new ArrayList<String>();
        while((partLine = bfpart.readLine())!=null){
            String restOfString="";
            String[] first = partLine.split(" ");
            String firstPart = first[0];
            for (int i=1; i<first.length; i++)
            {
                restOfString += first[i];
                restOfString += " ";
            }
            if(mapPart.isEmpty()){
                tmpList.add(restOfString);
                mapPart.put(firstPart, tmpList);
            }
            else{
                for (Map.Entry<String, List<String>> entry : mapPart.entrySet()) {
              String colId = entry.getKey();
              if(colId.equals(firstPart)){
                 List<String> lst = mapPart.get(colId);
                 lst.add(restOfString);
                 mapPart.put(colId,lst);
              }
              else{ //should we craete a new list
              }
            }

        }

токовый выход

map: {0=[Overcast Yes   4 , Rainy No    2 ,  Sunny No   3 ]}

Я пытаюсь вычислить это уравнение.

Info(n)=([no.of yes for overcast,no.of No for overcast],[no.of yes for Rainy,no.of no for Rainy],[no.of yes for Sunny,no.of no for Sunny])

Info0([4,0],[3,0],[0,3])/log2
Info1([3,1])/log2
  1. Является ли это хорошим способом сделать это уравнение
  2. или при чтении самого файла уравнение может быть выполнено или нет?
Теги:
hashmap

3 ответа

1

Вам не нужно перебирать всю хэш-карту. Это идея карты, которую вы можете искать по ключевым вопросам очень эффективно:

List<String> list = mapPart.get(firstPart);
if (list == null) {
    // first time using this index
    list = new ArrayList<String>();
    mapPart.put(firstPart, list);
}
list.add(restOfString);

(Замените свой for (Map.Entry<... цикл с помощью этого фрагмента)

  • 0
    Отображение «Несоответствие типов: невозможно преобразовать из списка <String> в строку» в mapPart.get (firstPart)
  • 1
    Извините, попробуйте еще раз, пожалуйста. Тип list должен быть List<String> конечно
Показать ещё 1 комментарий
0

HashMap не сохраняет значения на основе индексов. Вам не нужен индекс. вы могли бы сделать что-то подобное.

else{
 for (Map.Entry<String, List<String>> entry : mapPart.entrySet()) {
  String colId = entry.getKey();
  if(colId.equals(firstPart)){
     List<String> lst = get(colId);
     lst.add(restOfString);
     mapPart.put(colId,lst);
  }
 }
  • 0
    Карта <String, List <String >> не применима для аргументов (String, boolean). mapPart.get (colId) .add (restOfString) является логическим
  • 0
    Отредактировал ответ, чтобы добавить список.
0

Существует более простой и понятный способ сделать это

List<String> value = mapPart.get(firstPart); //1. Get the List<String> for the key
if(value == null) { //2. If it doesn't exist, then create and put it against the key
    value = new ArrayList<String>();
    mapPart.put(first, value);
}
value.add(restOfString); //3. Finally add the values for the key
  • 0
    Спасибо Sanbhat: а в остальной части нам нужно создать новую запись. В текущем ответе мы получим только o значений

Ещё вопросы

Сообщество Overcoder
Наверх
Меню