Commit 1042c4ff by Patryk Czarnik

Optional

parent f9763861
......@@ -10,8 +10,13 @@ public class Opt3 {
String miasto = JOptionPane.showInputDialog("Podaj miasto");
// Operacja map wykonana na obiekcie Optional zwraca w wyniku Optional
// który jest pusty, jeśli ten pierwszy był pusty, a zawiera wynik funkcji mapującej, jeśli pierwszy zawierał dane.
// W tym przypadku z Optional<Rekord> powstaje Optional<String>
// który jest pusty, jeśli ten pierwszy był pusty, a jest "pełny", jeśli Optipnal<Rekord> zawierał dane
// Operacja orElse odczytuje wartość, która jest w Optionalu (w tym przypadku string "Transakcja z dnia....")
// a zwraca podaną wartość domyślną, jeśli w Optionalu nie było niczego.
// Tak pisany orElse ma sens wtedy, gdy wartość domyślna jest zawsze taka sama (nie wymaga obliczeń).
// Gdy uzyskanie tej wartości wymaga obliczeń, zalecane jest stosowanie orElseGet (zob. następna wersja)
String tekst = lista.stream()
.filter(r -> r.miasto().equalsIgnoreCase(miasto))
......
package sprzedaz;
import javax.swing.*;
import java.util.Comparator;
import java.util.List;
public class Opt4 {
public static void main(String[] args) {
List<Rekord> lista = ObslugaCSV.wczytaj();
String miasto = JOptionPane.showInputDialog("Podaj miasto");
// orElseGet(() -> wzrór na wynik)
// wykona obliczenie tworzące wynik tylko wtedy i dopiero wtedy, gdy jest to potrzebne
String tekst = lista.stream()
.filter(r -> r.miasto().equalsIgnoreCase(miasto))
.max(Comparator.comparing(Rekord::wartosc))
.map(r -> "Transakcja z dnia " + r.data() + " o wartości " + r.wartosc()
+ "\n" + r.sztuk() + " sztuk towaru " + r.towar())
.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