HashMap to ArrayList

0

Witam!
Potrzebuje pomocy w konwersji wartosci i klucza
z hashmap do arraylist.
Zadanie polega na tym aby zaladowac text z pliku a nastepnie zliczyc w mapie powtorzenia slow(slowo=klucz, ilosc powtorzen=wartosc).
Na koniec w nowej metodzie zwrocic liste z tej mapy.

Tutaj mam konstruktor ktory tworzy ta mape I nadaje mu wartosci(w sysout rezultat jest pozytywny)

public CountWords(String fname)throws FileNotFoundException{
		ArrayList<String> list = new ArrayList<String>();
		Scanner scan = new Scanner(new File(fname));
		String txt = "";
		
		while(scan.hasNextLine()){
			txt += (scan.nextLine());
		}
		st = new StringTokenizer(txt);
		
		while(st.hasMoreTokens()){
			list.add(st.nextToken());
		}for(int i=0; i<list.size(); i++){
		txt = list.get(i);
		Integer licznik = (Integer)map.get(txt);
		if(licznik == null){
			 licznik = new Integer(1);
			 }else
			 licznik ++; 
		map.put(txt, licznik);
		
		}
		System.out.println(map);
	}

No I jak stworzyc metode zwracajaca mi ta liste.
Staralem sie przeksztalcic wartosc I klucz do stringa a nastepnie przyporzadkowac ja do listy. No ale niestety nie moge znalezc zadnego porzadnego rozwiazania

public List getResult(){
		ArrayList<String> list = new ArrayList<String>();
		String txt = "";
		for(int i=0; i<map.size(); i++){
		//brak pomyslu
		list.add(txt);
		}
		System.out.println(map.size());
		return list;
	}

Prosze o pomoc bo glowie sie juz z tym przeszlo 5 dni a nadal nic a do oddania prac coraz blizej :(

5
map.entrySet()
   .stream()
   .map(entry -> MessageFormat.format("Słowo {0}, wystąpiło {1} razy", entry.getKey(), entry.getValue()))
   .collect(Collectors.toList());
0
nIe            piszESZ   
postufwTENspo sÓb                                    dlaczego 

            więc


twój kodddddd

                     wyglądjak


           powojenna
                                               w       ar szA wa

^ delikatna sugestia, abyś zaznajomił się z pojęciem formatowania kodu

Tutaj mam konstruktor ktory tworzy ta mape I nadaje mu wartosci
1.Jakiemu mu?
2. mapę

Zadaj jedno konkretne pytanie.

3

Ten word count to też żeś zrobił tak ze szkoda gadać.

Map<String, Long> countingMap = Files.readAllLines(Paths.get("teksty.txt"))
        .stream()
        .flatMap(line -> Arrays.stream(line.split("\\s+")))
        .collect(Collectors.groupingBy(
                Function.identity(),
                Collectors.counting()
        ));

i voila, mamy mapę. A teraz:

List<String> list = countingMap.entrySet()
        .stream()
        .map(entry -> String.format("%s:%d", entry.getKey(), entry.getValue()))
        .collect(Collectors.toList());

i mamy listę

0

Ogromne dzieki za pomoc. Wszystko pieknie pyklo. Na przyszlosc bede staral sie wstawiac czytelniejszy kod.

0

A czy moglby ktos wytlumczyc dokladnie dzialanie tego kodu??

List<String> list = map.entrySet()
        .stream()
        .map(entry -> String.format("%s:%d", entry.getKey(), entry.getValue()))
        .collect(Collectors.toList());

Tworzymy liste,dzieki entrySet dostajemy obiekty Set z wartosciami i kluczami.. i co dalej?? i czym sa %s, %d.
Dopiero zaczynam swoja przygode z programowaniem, ale szybko sie ucze wiec prosze o troche wyrozumialosci:D

0

entrySet zwraca zbiór krotek (klucz, wartość) a my teraz robimy map() czyli wołamy pewną funkcje na każdym elemencie zbioru. W tym przypadku funkcja to String.format(). Jak nie wiemy co robi to czytamy w dokumentacji:
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
W ten sposób dla każdej krotki (klucz, wartość) dostajemy stringa klucz:wartość. Na koniec robimy collect() czyli zbieramy uzyskane wartości i uzywamy Collectors.toList() czyli standardowego zbierasza który paskuje dane do listy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1