Mam TreeMap do której jako klucz wrzucam numer zdania a jako wartość podaję ilość wyrazów w tym zdaniu. I tu pojawia się problem bo mam zliczyć że np 10 zdan ma 5 wyrazów a 2 maja 30 i za bardzo nie wiem jak to zrobić. Klucze są oczywiście różne ale wartości czasem się powtarzają.
Coś takiego:
Iterator<Integer> it = map.keySet().iterator();
Korzystając z metod hasNext
i next
wędrujesz po iteratorze i liczysz:
HashMap<Integer, Integer> counters = new HashMap<Integer, Integer>();
while(it.hasNext())
{
int words = map.get(it.next());
counters.put(words, counters.getOrDefault(words, 0) + 1);
}
bogdans napisał(a):
Coś takiego:
Iterator<Integer> it = map.keySet().iterator();
Korzystając z metod
hasNext
inext
wędrujesz po iteratorze i liczysz.
Czyli robię pętlę for i co dalej bo za bardzo nie ogarniam
Właśnie sobie uprzytomniłem, że jesteś początkujący i uzupełniłem swój post.
bogdans napisał(a):
Właśnie sobie uprzytomniłem, że jesteś początkujący i uzupełniłem swój post.
Dzięki wielkie :)
ok twój kod działa jak należy ale teraz nie wiem jak to wypisać w interesującej mnie formie.
coś takiego:
System.out.println(licz.values()+" zdań\n"+licz.keySet()+" słów");
wypisuje dwie tablice, a ja chciałbym w formie klucz = ilość wyrazów
Problem rozwiązany:
for(Entry<Integer, Integer> entry : licz.entrySet())
System.out.println(entry.getValue()+" zdań "+entry.getKey()+" słów");
Dzięki za pomoc
IMO trochę od złej strony podeszliście :) TreeMap
to mapa, a z mapą można zrobić tak:
public class TreeMapCounting {
public static void main(String[] args) {
TreeMap<Integer, Integer> map = new TreeMap<>();
map.put(1, 2);
map.put(2, 4);
map.put(3, 2);
map.put(4, 4);
map.put(5, 2);
Map<Integer, List<Map.Entry<Integer, Integer>>> byValue = map.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getValue));
byValue.entrySet().stream()
.forEach(e-> System.out.printf("Zdania o %d słowach to: %s%n", e.getKey(),
e.getValue().stream().map(Map.Entry::getKey).collect(Collectors.toList())));
}
}
Najpierw grupujemy po liczbie słów, a następnie wypisujemy. Drugi element w printf
to pobranie listy kluczy z oryginalnej mapy. Można to trochę uprościć, by nie był to taki Kropek, ale to już szczegół.