Commit 80335021 by Patryk Czarnik

Numerowanie i sortowanie Tadeusza

parent 02658e4b
...@@ -11,6 +11,12 @@ import java.util.stream.Stream; ...@@ -11,6 +11,12 @@ import java.util.stream.Stream;
public class PosortujTadeusza2 { public class PosortujTadeusza2 {
static int nr = 0; static int nr = 0;
// Z wyrażeń lambda nie wolno modyfikować zmiennych lokalnych zadeklarowanych w metodzie otaczającej.
// Tutaj używam zmiennej statycznej, aby ponumerować linie.
// Uwaga, takie podejście ze zmienną jest poprawne tylko w przypadku strumienia sekwencyjnego,
// a byłoby błędem w przypadku wielowątkowego (parallelStream).
// W tej wersji otwieramy obiekt PrintWriter i od razu w locie zapisujemy linie.
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Startujemy"); System.out.println("Startujemy");
...@@ -29,6 +35,5 @@ public class PosortujTadeusza2 { ...@@ -29,6 +35,5 @@ public class PosortujTadeusza2 {
e.printStackTrace(); e.printStackTrace();
} }
System.out.println("Gotowe"); System.out.println("Gotowe");
} }
} }
package p24_pliki;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.Collator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class PosortujTadeusza3 {
static int nr = 0;
// Z wyrażeń lambda nie wolno modyfikować zmiennych lokalnych zadeklarowanych w metodzie otaczającej.
// Tutaj używam zmiennej statycznej, aby ponumerować linie.
// Uwaga, takie podejście ze zmienną jest poprawne tylko w przypadku strumienia sekwencyjnego,
// a byłoby błędem w przypadku wielowątkowego (parallelStream).
// W tej wersji wynikowe linie najpierw zbieramy do listy, a następnie zapisujemy.
public static void main(String[] args) {
System.out.println("Startujemy");
List<String> lista = List.of();
try(Stream<String> lines = Files.lines(Paths.get("pliki/pan_tadeusz.txt"))) {
lista = lines
.map(String::strip)
.filter(s -> !s.isEmpty())
// .sorted()
.sorted(Collator.getInstance())
.map(s -> String.format("%6d: %s", ++nr, s))
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
try {
System.out.println("Zapisuję");
Files.write(Paths.get("out/posorotwane.txt"), lista);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Gotowe");
}
}
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