Commit a0a39dba by Patryk Czarnik

liczenie słów - wersje stream

parent f631e7d3
......@@ -2,18 +2,19 @@ package domowe.r4.pan_tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class PoliczWszystkieSlowa_v3 {
// W tej wersji stosuję nowe (Java 8) "funkcyjne" operacje:
// - forEachRemaining, która zastpuje nam pętlę while i w inny sposób pozwala przejść przez słowa
// - merge, która aktualizuje zawartość słownika
// - wypisywanie wyników też za pomocą funkcyjnego forEach
// W tej wersji nie są jeszcze używane strumienie.
public static void main(String[] args) {
Map<String, Integer> slownik = new TreeMap<>();
Map<String, Integer> slownik = new LinkedHashMap<>();
try(Scanner scanner = new Scanner(new File("pliki/pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
......@@ -22,9 +23,9 @@ public class PoliczWszystkieSlowa_v3 {
e.printStackTrace();
}
for(Map.Entry<String, Integer> entry : slownik.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
slownik.forEach((k, v) -> {
System.out.println(k + " → " + v);
});
}
}
package domowe.r4.pan_tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Scanner;
import java.util.function.Function;
import java.util.stream.Collectors;
public class PoliczWszystkieSlowa_v4 {
public static void main(String[] args) {
try(Scanner scanner = new Scanner(new File("pliki/pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
// Strumień wszystkich słów jest dostępny jako "tokens()".
// Gdybyśmy mieli listę Stringów i napisali lista.stream()
// to właśnie dałoby to analogiczny efekt, jak scanner.tokens()
// scanner.tokens().forEach(System.out::println);
Map<String, Long> slownik = scanner.tokens()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// zapisałem wynik grupowania do zmiennej, aby pokazać, żde wychodzi własnie taki słownik, jak wcześniej
slownik.forEach((k, v) -> {
System.out.println(k + " → " + v);
});
} catch(FileNotFoundException e) {
e.printStackTrace();
}
}
}
package domowe.r4.pan_tadeusz;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Scanner;
import java.util.function.Function;
import java.util.stream.Collectors;
public class PoliczWszystkieSlowa_v5 {
public static void main(String[] args) {
try(Scanner scanner = new Scanner(new File("pliki/pan_tadeusz.txt"))) {
scanner.useDelimiter("[^\\p{L}\\d]+");
// W tej wersji będzie tylko jeden "pipeline", w którym pośrednio pojawi się słownik,
// ale od razu na nim wykonamy dalsze kroki.
scanner.tokens()
.map(String::toLowerCase)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(entry -> {
System.out.println(entry.getKey() + " → " + entry.getValue());
});
} catch(FileNotFoundException e) {
e.printStackTrace();
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment