Мне нужно подсчитать вхождения и отношения строк.Попытка заполнить и вернуть список внутри HashMap объектов
Например, я должен прочитать файл как выше:
(city) (name) (surname)
London Johnny Stuart
Leeds Johnny Bravo
Wigan Richard Stuart
Bristol Richard Bravo
Bolton Johnny Bravo
York Alex Crowley
Bolton null null
И мне нужно посчитать количество фамилий, уникальных имен и имен списков, связанные с фамилиями, как выше (фамилия, кол фамилии выхода , уникальный счетчик имя, список имен):
Stuart 2 2 Johnny, Richard
Bravo 3 2 Johnny, Richard
Crowley 1 1 Alex
Я пытаюсь реализовать измененную версию MutableInt (Most efficient way to increment a Map value in Java), но неудачно.
Код:
class MutableInt{
//Surname Count
int value = 1;
public void increment() { ++value; }
public int get() { return value; }
//Name List and Count
List<String> name;
int nameCount = 1;
public void incrementName() { ++nameCount; }
public int getNameCount() { return nameCount; }
public void addName(String n){
if(n != null && !name.contains(n)){
name.add(n);
incrementName();
}
}
public String getName() {
return Arrays.toString(name.toArray());
}
public String toString() {
return (this.get()+
"\t"+ this.getNameCount() +
"\t"+ this.getName());
}
}
HashMap Начинка:
Map<String, MutableInt> nameCount = new HashMap<String, MutableInt>();
String l;
while ((l = inputStream.readLine()) != null) {
if (curLine++ < 1) {
continue;
}
values = l.split("\t");
String name = values[1];
String surname = values[2];
// Count Names
MutableInt count1 = nameCount.get(surname);
if (count1 == null) {
nameCount.put(surname, new MutableInt());
nameCount.get(surname).addName(name);
}
else {
count1.increment();
nameCount.get(surname).addName(name);
}
}
Печать:
Iterator<Entry<String, MutableInt>> itrE1 = nameCount.entrySet().iterator();
while(itrE1.hasNext()){
Map.Entry<String, MutableInt> entry1 = itrE1.next();
efileWriter.write(entry1.getKey()"\t"+ entry1.getValue().toString()+"\n");
}
И это ошибка у меня:
java.lang.NullPointerException at diverenrich.InterfaceAgent$writeSummary$MutableInt.addGene(InterfaceAgent.java:626)
at diverenrich.InterfaceAgent$writeSummary.action(InterfaceAgent.java:744)
Line 626 -> if(na != null && !name.contains(name)){ ... }
Line 744 -> nameCount.get(surname).addName(name);
Любые советы?
Правильное значение nameCount равно нулю, а не одному! – Jwojwo