Skip to content

Instantly share code, notes, and snippets.

@Gabbendorf
Gabbendorf / memberFinder.java
Last active May 22, 2019 15:41
Java Optional: example with .ifPresentOrElse()
public void printMemberNameIfPresent(List<Member> members, int memberId) {
members.stream()
.filter(member -> member.getId() == memberId)
.findFirst()
.ifPresentOrElse(
member -> printMemberFullName(member.getFullName()), // if present, print successful message
() -> printNoMemberMessage(memberId) // if absent, print unsuccessful message
);
}
@Gabbendorf
Gabbendorf / memberFinder.java
Created May 22, 2019 14:43
Java Optional: bad alternative to .ifPresent()
public void printMemberNameIfPresent(List<Member> members, int memberId) {
Optional<Member> maybeMember = members.stream()
.filter(member -> member.getId() == memberId)
.findFirst();
if (maybeMember.isPresent()) {
printMemberFullName(maybeMember.get().getFullName());
}
}
@Gabbendorf
Gabbendorf / memberFinder.java
Created May 22, 2019 14:41
Java Optional: example with .ifPresent()
public void printMemberNameIfPresent(List<Member> members, int memberId) {
members.stream()
.filter(member -> member.getId() == memberId)
.findFirst()
.ifPresent(member -> printMemberFullName(member.getFullName())); // if present, apply the lambda on the value
}
private static void printMemberFullName(String memberFullName) {
System.out.println(String.format("The member's full name is %s", memberFullName));
}
@Gabbendorf
Gabbendorf / memberFinder.java
Created May 22, 2019 14:39
Java Optional: alternative to .filter() with .isPresent() and .get()
public String nameOfActiveMemberById(List<Member> members, int memberId) {
Optional<Member> maybeMember = members.stream()
.filter(member -> member.getId() == memberId)
.findFirst();
if (maybeMember.isPresent() && maybeMember.get().isActive()) {
return maybeMember.get().getFullName();
} else {
throw new NoActiveMemberException();
}
@Gabbendorf
Gabbendorf / memberFinder.java
Created May 22, 2019 14:36
Java Optional: example with .filter() and .map()
public String nameOfActiveMemberById(List<Member> members, int memberId) {
return members.stream()
.filter(member -> member.getId() == memberId) // this is stream.filter
.findFirst() // gets Optional
.filter(Member::isActive) // if present, apply the predicate
.map(Member::getFullName) // if the output of predicate is true, get the full name
.orElseThrow(NoActiveMemberException::new); // if the output is false, throw an exception
}
@Gabbendorf
Gabbendorf / memberFinder.java
Created May 22, 2019 14:34
Java Optional: example with .map() and .orElse()
public String memberNameById(List<Member> members, int memberId) {
return members.stream()
.filter(member -> member.getId() == memberId)
.findFirst() // returns an Optional
.map(Member::getName) // transforms the value if present in the Optional
.orElse("UNKNOWN"); // if the Optional is absent, it returns a default value
}
@Gabbendorf
Gabbendorf / memberFinder.java
Last active May 22, 2019 14:31
Java Optional: example with .isPresent() and .get()
public String memberNameById(List<Member> members, int memberId) {
Optional<Member> maybeMember = members.stream()
.filter(member -> member.getId() == memberId)
.findFirst(); // returns an Optional
if (maybeMember.isPresent()) {
return maybeMember.get().getName();
} else {
return "UNKNOWN";
}
@Gabbendorf
Gabbendorf / memberFinder.java
Last active May 22, 2019 14:29
Java Optional: example with .get() that might throw a NoSuchElementException
public String memberNameById(List<Member> members, int memberId) {
return members.stream()
.filter(member -> member.getId() == memberId)
.findFirst() // returns an Optional
.get() // extracts the value out of the Optional
.getName();
}
@Gabbendorf
Gabbendorf / memberFinder.java
Last active May 22, 2019 14:52
Java Optional: method that might throw a NullPointerException
public Member memberById(List<Member> members, int memberId) {
List<Member> maybeMembers = members.stream()
.filter(member -> member.getId() == memberId)
.collect(Collectors.toList());
if (maybeMembers.size() > 0) {
return maybeMembers.get(0);
} else {
return null;
}
@Gabbendorf
Gabbendorf / memberFinder.java
Last active May 22, 2019 14:52
Java Optional: example that throws an IndexOutOfBoundsException
public Member memberById(List<Member> members, int memberId) {
return members.stream()
.filter(member -> member.getId() == memberId)
.collect(Collectors.toList())
.get(0);
}