Commit 4594ceb5 by Patryk Czarnik

dopiski do streamów i PanTadeusz

parent fab1f889
......@@ -5,9 +5,9 @@ import java.util.List;
import java.util.Map;
public class Grupowanie1 {
// W tej wersji widzimy klasyczny algorytm "agregacji danych za pomocą slownika"
// W tej wersji widzimy klasyczny algorytm "agregacji danych za pomocąownika"
// Listę pracowników przeglądamy tylko raz, na bieżąco aktualizując słowniki.
// W tej wersji używamy tylko podstawowych operacji na kolekcjach (sprzed Java 8
// W tej wersji używamy tylko podstawowych operacji na kolekcjach (sprzed Java 8)
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj();
......
......@@ -15,7 +15,7 @@ public class Grupowanie3 {
for(Employee emp : emps) {
// co wstawić w razie braku danych (gdy dane już są - krok jest pomijany)
sumy.putIfAbsent(emp.getJobTitle(), 0);
// w jaki sposób uzyskuje się nową wartość na podstawie klucza oraz starej wartości
// w jaki sposób uzyskuje się nową wartość na podstawie klucza oraz starej wartości
sumy.computeIfPresent(emp.getJobTitle(), (job, staraSuma) -> staraSuma + emp.getSalary());
ilosci.putIfAbsent(emp.getJobTitle(), 0);
......
......@@ -35,17 +35,17 @@ public class NoweOperacjeList {
System.out.println();
System.out.println();
List<String> lista1 = (List<String>)lista.clone();
List<String> lista1 = new ArrayList<>(lista);
System.out.println(lista1);
// predykat; operacja usuwa z listy wszystkie spełaniające warunek
lista1.removeIf(s -> s.length() <= 3);
System.out.println(lista1);
System.out.println();
List<String> lista2 = (List<String>)lista.clone();
List<String> lista2 = new ArrayList<>(lista);
System.out.println(lista2);
lista2.replaceAll(s -> s.toUpperCase()); // lambda expression
// lista2.replaceAll(String::toUpperCase); // method reference - w tym przypadku równoważnie
// lista2.replaceAll(s -> s.toUpperCase()); // lambda expression
lista2.replaceAll(String::toUpperCase); // method reference - w tym przypadku równoważnie
System.out.println(lista2);
System.out.println();
}
......
......@@ -58,13 +58,13 @@ public class C12_FlatMap {
// zero (!), jeden, dowolną skończoną liczbę, a nawet nieskońćzoność.
// Funkcja mapuje wartości na strumienie - wynikiem jest strumień wartości.
System.out.println("Płaskie mapowanie:");
Stream.of(1, 3, 5)
Stream.of(1, 3, 0, 5)
.flatMap(x -> C12_FlatMap.generuj(x).stream())
.forEach(x -> System.out.print(x + " | "));
System.out.println();
System.out.println();
Stream.of(1, 3, 5)
Stream.of(1, 3, 0, 5)
.flatMap(C12_FlatMap::generujStrumien)
.forEach(x -> System.out.print(x + " | "));
System.out.println();
......
......@@ -31,7 +31,7 @@ public class KlasaOptional {
try {
System.out.println(napis0.get());
} catch (Exception e) {
System.err.println("próba odczytu napis0.get(): " + e);
System.out.println("próba odczytu napis0.get(): " + e);
}
System.out.println();
......@@ -95,7 +95,6 @@ public class KlasaOptional {
System.out.println("hej " + opt.map(String::toLowerCase).orElse("nieznajomy"));
}
System.out.println();
//
for(Optional<String> opt : lista) {
String napis = opt.filter(s -> s.startsWith("O")).map(String::toUpperCase).orElse("---");
......
package pan_tadeusz;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Comparator;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class PoliczSlowaStream {
private static final String SEP = "[^\\p{L}\\d]+";
public static void main(String[] args) {
try(Stream<String> lines = Files.lines(Paths.get("pan_tadeusz.txt"), Charset.forName("UTF-8"))) {
lines.flatMap(line -> Stream.of(line.split(SEP)))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.sorted(Map.Entry.<String, Long>comparingByValue().reversed())
.forEachOrdered(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));
} catch(IOException e) {
e.printStackTrace();
}
}
}
......@@ -21,7 +21,7 @@ import java.util.stream.Stream;
* jest realizowana bezpośrednio przez JVM. Natomaist dla klas `BigDecimal` oraz `LocalDate`
* tworzę własną implementację tego mechanizmu opartą o słowniki.
* Ta technika służy przede wszystkim oszczędzaniu pamięci,
* może zwrócić się czasowo, jeśli dane po wczytaniu będą później intensywnie używane chociażby w porównaniach,
* może zwrócić się czasowo, jeśli dane po wczytaniu będą później intensywnie używane chociażby w porównaniach,
* jest poprawna w przypadku klas niemutowalnych.
*/
......@@ -34,6 +34,7 @@ public class MaszynaWczytujaca2 {
String[] pola = linia.split(",");
int sztuk = Integer.parseInt(pola[6]);
// "2020-03-04" → LocalDate(2020, 3, 4)
LocalDate data = pulaDat.computeIfAbsent(pola[0], LocalDate::parse);
BigDecimal cena = pulaCen.computeIfAbsent(pola[5], BigDecimal::new);
......
......@@ -20,6 +20,5 @@ public class Opt4 {
.orElseGet(() -> "Nie znaleziono rekordów w mieście " + miasto);
JOptionPane.showMessageDialog(null, tekst);
}
}
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