Skip to content
This repository was archived by the owner on Feb 10, 2021. It is now read-only.

Commit 95d8c8a

Browse files
author
Taras
committed
- add OptionalCreation.java
- add OptionalImperativeVsDeclarativeCheck.java - add OptionalStream.java - refactored OptionalSearchByEmailExample.java and OptionalExamples.java
1 parent d9e53ed commit 95d8c8a

File tree

5 files changed

+99
-20
lines changed

5 files changed

+99
-20
lines changed
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.bobocode;
2+
3+
import com.bobocode.data.Accounts;
4+
import com.bobocode.model.Account;
5+
6+
import java.util.Optional;
7+
8+
public class OptionalCreation {
9+
public static void main(String[] args) {
10+
Account account = Accounts.getAccount();
11+
12+
Optional<Account> optionalAccount = Optional.of(account);
13+
14+
Optional<Account> optionalNullableAccount = Optional.ofNullable(account);
15+
16+
Optional<Account> optionalEmptyAccount = Optional.empty();
17+
}
18+
}

Diff for: optional/src/main/java/com/bobocode/OptionalExamples.java

+12-19
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,37 @@
44
import com.bobocode.data.Accounts;
55
import com.bobocode.model.Account;
66

7-
import java.util.List;
87
import java.util.Optional;
98

10-
import static java.util.Comparator.comparing;
11-
12-
public class OptionalExamples {
9+
public class OptionalExamples {
1310
private static Account DEFAULT_ACCOUNT = Accounts.getAccount();
1411

1512
public static void main(String[] args) {
16-
List<Account> accounts = Accounts.getAccountList(10);
17-
Optional<Account> optionalAccountWithMaxBalance = findAccountWithMaxBalance(accounts);
18-
19-
printAccountUsingWrongApproach(optionalAccountWithMaxBalance);
20-
printAccountUsingRightApproach(optionalAccountWithMaxBalance);
13+
Account account = Accounts.getAccount();
14+
Optional<Account> optionalAccount = Optional.of(account);
2115

22-
printAccountOrDefault(optionalAccountWithMaxBalance);
23-
printAccountOrRandomLazily(optionalAccountWithMaxBalance);
24-
}
16+
printAccountUsingWrongApproach(optionalAccount);
17+
printAccountUsingRightApproach(optionalAccount);
2518

26-
private static Optional<Account> findAccountWithMaxBalance(List<Account> accounts) {
27-
return accounts.stream().max(comparing(Account::getBalance));
19+
printAccountOrDefault(optionalAccount);
20+
printAccountOrRandomLazily(optionalAccount);
2821
}
2922

3023
/**
3124
* It is not correct to process to process {@link Optional} values in the old imperative way, as it is shown below
3225
*/
33-
private static void printAccountUsingWrongApproach(Optional<Account> optionalAccountWithMaxBalance) {
34-
if (optionalAccountWithMaxBalance.isPresent()) {
35-
Account account = optionalAccountWithMaxBalance.get();
26+
private static void printAccountUsingWrongApproach(Optional<Account> optionalAccount) {
27+
if (optionalAccount.isPresent()) {
28+
Account account = optionalAccount.get();
3629
System.out.println(account);
3730
}
3831
}
3932

4033
/**
4134
* The right way is to pass a consumer that will be used in case {@link Optional} value is not empty
4235
*/
43-
private static void printAccountUsingRightApproach(Optional<Account> optionalAccountWithMaxBalance) {
44-
optionalAccountWithMaxBalance.ifPresent(System.out::println);
36+
private static void printAccountUsingRightApproach(Optional<Account> optionalAccount) {
37+
optionalAccount.ifPresent(System.out::println);
4538
}
4639

4740
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.bobocode;
2+
3+
import com.bobocode.data.Accounts;
4+
import com.bobocode.model.Account;
5+
6+
import java.util.Optional;
7+
8+
public class OptionalImperativeVsDeclarativeCheck {
9+
public static void main(String[] args) {
10+
Account account = Accounts.getAccount();
11+
Optional<Account> optionalAccount = Optional.of(account);
12+
13+
printAccount(account);
14+
printOptionalAccount(optionalAccount);
15+
}
16+
17+
/**
18+
* An if statement is a classic example of imperative check
19+
*/
20+
private static void printAccount(Account account) {
21+
if (account != null) {
22+
System.out.println(account);
23+
} else {
24+
System.out.println("No such element exists!");
25+
}
26+
}
27+
28+
/**
29+
* This is an example of declarative check. You don't write an if statement yourself, it is performed inside the
30+
* method ifPresentOrElse()
31+
*/
32+
private static void printOptionalAccount(Optional<Account> optionalAccount) {
33+
optionalAccount.ifPresentOrElse(System.out::println,
34+
() -> System.out.println("No such element exists!"));
35+
}
36+
}

Diff for: optional/src/main/java/com/bobocode/OptionalSearchByEmailExample.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ private static Account getAccountByEmailImperatively(List<Account> accounts, Str
4040
}
4141

4242
private static void printAccount(Account account) {
43-
System.out.println("This account belongs to " + account.getFirstName() + " " + account.getLastName());
43+
System.out.println("This account belongs to " + account.getFirstName() +
44+
" " + account.getLastName());
4445
}
4546

4647
static class NoSuchElementException extends RuntimeException {
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.bobocode;
2+
3+
import com.bobocode.data.Accounts;
4+
import com.bobocode.model.CreditAccount;
5+
6+
import java.util.List;
7+
import java.util.Optional;
8+
9+
public class OptionalStream {
10+
public static void main(String[] args) {
11+
List<CreditAccount> creditAccounts = Accounts.getCreditAccountsList(10);
12+
13+
printExistingCreditBalancesJava8(creditAccounts);
14+
printExistingCreditBalancesJava9(creditAccounts);
15+
}
16+
17+
private static void printExistingCreditBalancesJava8(List<CreditAccount> creditAccounts) {
18+
creditAccounts.stream()
19+
.map(CreditAccount::getCreditBalance)
20+
.filter(Optional::isPresent)
21+
.map(Optional::get)
22+
.forEach(System.out::println);
23+
}
24+
25+
private static void printExistingCreditBalancesJava9(List<CreditAccount> creditAccounts) {
26+
creditAccounts.stream()
27+
.map(CreditAccount::getCreditBalance)
28+
.flatMap(Optional::stream)
29+
.forEach(System.out::println);
30+
}
31+
}

0 commit comments

Comments
 (0)