Skip to content

Commit bdb937e

Browse files
shubhi22maibin
authored andcommitted
BAEL 1748 - Optional - orElse() vs orElseGet() (eugenp#4240)
* Types of Bean Injection in Spring * Changing config file name * BAEL-1584 : Find an element in list * Revert "Changing config file name" This reverts commit d857db9. * Revert "Types of Bean Injection in Spring" This reverts commit e9efcb8. * BAEL-1584 : Find an Element in Given List * BAEL-1584 : Hashcode impl changed * BAEL:1584 : ListIterator to Iterator change * Method name refactoring * BAEL 1748 - Optional OrElse vs OrElseGet * BAEL-1748 Benchmark Runner
1 parent 8b324a3 commit bdb937e

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.optional;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.Optional;
6+
import java.util.Random;
7+
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
public class OrElseAndOrElseGet {
12+
13+
public static List<String> names = Arrays.asList("John", "Jones", "Kelly", "Cristina", "Raven");
14+
15+
private static final Logger LOG = LoggerFactory.getLogger(OrElseAndOrElseGet.class);
16+
17+
public String getRandomName() {
18+
LOG.info("getRandomName() method - start");
19+
Random random = new Random();
20+
int index = random.nextInt(5);
21+
LOG.info("getRandomName() method - end");
22+
return names.get(index);
23+
}
24+
25+
public String getNameUsingOrElse(String name) {
26+
return Optional.ofNullable(name)
27+
.orElse(getRandomName());
28+
}
29+
30+
public String getNameUsingOrElseGet(String name) {
31+
return Optional.ofNullable(name)
32+
.orElseGet(() -> getRandomName());
33+
}
34+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.baeldung.optional;
2+
3+
import java.io.IOException;
4+
import java.util.concurrent.TimeUnit;
5+
6+
import org.openjdk.jmh.annotations.Benchmark;
7+
import org.openjdk.jmh.annotations.BenchmarkMode;
8+
import org.openjdk.jmh.annotations.Fork;
9+
import org.openjdk.jmh.annotations.Mode;
10+
import org.openjdk.jmh.annotations.OutputTimeUnit;
11+
import org.openjdk.jmh.annotations.Scope;
12+
import org.openjdk.jmh.annotations.State;
13+
import org.openjdk.jmh.runner.RunnerException;
14+
15+
@Fork(1)
16+
@State(Scope.Benchmark)
17+
@BenchmarkMode(Mode.AverageTime)
18+
@OutputTimeUnit(TimeUnit.NANOSECONDS)
19+
public class OrElseAndOrElseGetBenchmarkRunner {
20+
21+
private OrElseAndOrElseGet orElsevsOrElseGet = new OrElseAndOrElseGet();
22+
23+
public static void main(String[] args) throws RunnerException, IOException {
24+
org.openjdk.jmh.Main.main(args);
25+
}
26+
27+
@Benchmark
28+
public String orElseBenchmark() {
29+
return orElsevsOrElseGet.getNameUsingOrElse("baeldung");
30+
}
31+
32+
@Benchmark
33+
public String orElseGetBenchmark() {
34+
return orElsevsOrElseGet.getNameUsingOrElseGet("baeldung");
35+
}
36+
37+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.baeldung.java8.optional;
2+
3+
import org.junit.Test;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
import static org.junit.Assert.*;
8+
9+
import com.baeldung.optional.OrElseAndOrElseGet;
10+
11+
public class OrElseAndOrElseGetTest {
12+
13+
private OrElseAndOrElseGet orElsevsOrElseGet = new OrElseAndOrElseGet();
14+
15+
private static final Logger LOG = LoggerFactory.getLogger(OrElseAndOrElseGetTest.class);
16+
17+
@Test
18+
public void givenNonEmptyOptional_whenOrElseUsed_thenGivenStringReturned() {
19+
LOG.info("In givenNonEmptyOptional_whenOrElseUsed_thenGivenStringReturned()");
20+
String name = orElsevsOrElseGet.getNameUsingOrElse("baeldung");
21+
assertEquals(name, "baeldung");
22+
}
23+
24+
@Test
25+
public void givenEmptyOptional_whenOrElseUsed_thenRandomStringReturned() {
26+
LOG.info("In givenEmptyOptional_whenOrElseUsed_thenRandomStringReturned()");
27+
String name = orElsevsOrElseGet.getNameUsingOrElse(null);
28+
assertTrue(orElsevsOrElseGet.names.contains(name));
29+
}
30+
31+
@Test
32+
public void givenNonEmptyOptional_whenOrElseGetUsed_thenGivenStringReturned() {
33+
LOG.info("In givenNonEmptyOptional_whenOrElseGetUsed_thenGivenStringReturned()");
34+
String name = orElsevsOrElseGet.getNameUsingOrElseGet("baeldung");
35+
assertEquals(name, "baeldung");
36+
}
37+
38+
@Test
39+
public void givenEmptyOptional_whenOrElseGetUsed_thenRandomStringReturned() {
40+
LOG.info("In givenEmptyOptional_whenOrElseGetUsed_thenRandomStringReturned()");
41+
String name = orElsevsOrElseGet.getNameUsingOrElseGet(null);
42+
assertTrue(orElsevsOrElseGet.names.contains(name));
43+
}
44+
}

0 commit comments

Comments
 (0)