Optional demo.
This commit is contained in:
parent
a37f8801d4
commit
4695639b8f
15
demo/03/src/main/java/pl/amu/edu/demo/data/Address.java
Normal file
15
demo/03/src/main/java/pl/amu/edu/demo/data/Address.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package pl.amu.edu.demo.data;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.experimental.FieldDefaults;
|
||||||
|
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@FieldDefaults(level = AccessLevel.PUBLIC, makeFinal = true)
|
||||||
|
@Builder(toBuilder = true)
|
||||||
|
public class Address {
|
||||||
|
String addressLine1 = "Northern Bridge";
|
||||||
|
String addressLine2 = null;
|
||||||
|
String zipCode = "01-868";
|
||||||
|
}
|
24
demo/03/src/main/java/pl/amu/edu/demo/data/Housing.java
Normal file
24
demo/03/src/main/java/pl/amu/edu/demo/data/Housing.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package pl.amu.edu.demo.data;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.experimental.FieldDefaults;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@FieldDefaults(level = AccessLevel.PUBLIC, makeFinal = true)
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
public class Housing {
|
||||||
|
Address address;
|
||||||
|
boolean isApartment;
|
||||||
|
Double area;
|
||||||
|
|
||||||
|
public Optional<String> zipCode() {
|
||||||
|
return Optional.ofNullable(address).map(address -> address.zipCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
29
demo/03/src/main/java/pl/amu/edu/demo/data/Person.java
Normal file
29
demo/03/src/main/java/pl/amu/edu/demo/data/Person.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package pl.amu.edu.demo.data;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.experimental.FieldDefaults;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@FieldDefaults(level = AccessLevel.PUBLIC, makeFinal = true)
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
public class Person {
|
||||||
|
String displayName;
|
||||||
|
String firstName;
|
||||||
|
String lastName;
|
||||||
|
LocalDate birthDate;
|
||||||
|
Housing housing;
|
||||||
|
boolean isMarried;
|
||||||
|
|
||||||
|
public boolean isAdult() {
|
||||||
|
return Objects.nonNull(birthDate) &&
|
||||||
|
LocalDate.now().minusYears(18).isAfter(birthDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package pl.amu.edu.demo.maybe;
|
||||||
|
|
||||||
|
import pl.amu.edu.demo.data.Address;
|
||||||
|
import pl.amu.edu.demo.data.Housing;
|
||||||
|
import pl.amu.edu.demo.data.Person;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class OptionalExample {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new OptionalExample().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void run() {
|
||||||
|
var person = Person.builder()
|
||||||
|
.displayName("Gąska Balbinka").birthDate(LocalDate.ofYearDay(1959, 1)).build();
|
||||||
|
var address = Address.builder().build();
|
||||||
|
var underTheBridge = Housing.builder().area(0.2).address(address).build();
|
||||||
|
var maybeAdult = Optional.ofNullable(person)
|
||||||
|
.filter(Person::isAdult);
|
||||||
|
var housing = maybeAdult
|
||||||
|
.map(Person::getHousing)
|
||||||
|
.orElse(underTheBridge);
|
||||||
|
var zipCode = Optional.of(housing)
|
||||||
|
.flatMap(Housing::zipCode)
|
||||||
|
.orElseThrow();
|
||||||
|
maybeAdult
|
||||||
|
.map(Person::getBirthDate)
|
||||||
|
.map(birthDate -> {
|
||||||
|
var name = person.displayName;
|
||||||
|
return String.format("%s: born %s lives at %s area.", name, birthDate, zipCode);
|
||||||
|
})
|
||||||
|
.ifPresent(System.out::println);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user