Merge branch 'master' into BAEL-3660_Open_Liberty

# Conflicts:
#	pom.xml
This commit is contained in:
Anshul BANSAL
2020-01-22 15:14:44 +02:00
257 changed files with 4177 additions and 828 deletions
+3 -2
View File
@@ -42,12 +42,12 @@
<dependency>
<groupId>org.eclipse.collections</groupId>
<artifactId>eclipse-collections</artifactId>
<version>10.0.0</version>
<version>${eclipse.collections.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.collections</groupId>
<artifactId>eclipse-collections-api</artifactId>
<version>10.0.0</version>
<version>${eclipse.collections.version}</version>
</dependency>
</dependencies>
@@ -108,6 +108,7 @@
<assertj.version>3.11.1</assertj.version>
<uberjar.name>benchmarks</uberjar.name>
<jmh.version>1.22</jmh.version>
<eclipse.collections.version>10.0.0</eclipse.collections.version>
</properties>
</project>
+2 -1
View File
@@ -41,7 +41,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<version>${surefire.plugin.version}</version>
<configuration>
<argLine>--enable-preview</argLine>
</configuration>
@@ -53,6 +53,7 @@
<maven.compiler.source.version>13</maven.compiler.source.version>
<maven.compiler.target.version>13</maven.compiler.target.version>
<assertj.version>3.6.1</assertj.version>
<surefire.plugin.version>3.0.0-M3</surefire.plugin.version>
</properties>
</project>
@@ -0,0 +1,27 @@
package com.baeldung.newfeatures;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class SwitchExpressionsWithYieldUnitTest {
@Test
@SuppressWarnings("preview")
public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() {
var me = 4;
var operation = "squareMe";
var result = switch (operation) {
case "doubleMe" -> {
yield me * 2;
}
case "squareMe" -> {
yield me * me;
}
default -> me;
};
assertEquals(16, result);
}
}
@@ -0,0 +1,39 @@
package com.baeldung.newfeatures;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
public class TextBlocksUnitTest {
private static final String JSON_STRING = "{\r\n" + "\"name\" : \"Baeldung\",\r\n" + "\"website\" : \"https://www.%s.com/\"\r\n" + "}";
@SuppressWarnings("preview")
private static final String TEXT_BLOCK_JSON = """
{
"name" : "Baeldung",
"website" : "https://www.%s.com/"
}
""";
@Test
public void whenTextBlocks_thenStringOperationsWork() {
assertThat(TEXT_BLOCK_JSON.contains("Baeldung")).isTrue();
assertThat(TEXT_BLOCK_JSON.indexOf("www")).isGreaterThan(0);
assertThat(TEXT_BLOCK_JSON.length()).isGreaterThan(0);
}
@SuppressWarnings("removal")
@Test
public void whenTextBlocks_thenFormattedWorksAsFormat() {
assertThat(TEXT_BLOCK_JSON.formatted("baeldung")
.contains("www.baeldung.com")).isTrue();
assertThat(String.format(JSON_STRING, "baeldung")
.contains("www.baeldung.com")).isTrue();
}
}
+2 -1
View File
@@ -36,7 +36,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<version>${surefire.plugin.version}</version>
<configuration>
<argLine>--enable-preview</argLine>
</configuration>
@@ -47,6 +47,7 @@
<properties>
<maven.compiler.source.version>14</maven.compiler.source.version>
<maven.compiler.target.version>14</maven.compiler.target.version>
<surefire.plugin.version>3.0.0-M3</surefire.plugin.version>
</properties>
</project>
+2 -1
View File
@@ -51,7 +51,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<version>${shade.plugin.version}</version>
<executions>
<execution>
<phase>package</phase>
@@ -79,6 +79,7 @@
<commons-lang3.version>3.9</commons-lang3.version>
<!-- testing -->
<assertj-core.version>3.10.0</assertj-core.version>
<shade.plugin.version>3.2.0</shade.plugin.version>
</properties>
</project>
+4 -2
View File
@@ -183,8 +183,8 @@
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
@@ -373,6 +373,8 @@
<maven-shade-plugin.version>3.1.1</maven-shade-plugin.version>
<spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version>
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
<source.version>1.8</source.version>
<target.version>1.8</target.version>
</properties>
</project>
@@ -0,0 +1,57 @@
package com.baeldung.async;
import static com.ea.async.Async.await;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import com.ea.async.Async;
public class EAAsyncExample {
static {
Async.init();
}
public static void main(String[] args) throws Exception {
usingCompletableFuture();
usingAsyncAwait();
}
public static void usingCompletableFuture() throws InterruptedException, ExecutionException, Exception {
CompletableFuture<Void> completableFuture = hello()
.thenComposeAsync(hello -> mergeWorld(hello))
.thenAcceptAsync(helloWorld -> print(helloWorld))
.exceptionally( throwable -> {
System.out.println(throwable.getCause());
return null;
});
completableFuture.get();
}
public static CompletableFuture<String> hello() {
CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> "Hello");
return completableFuture;
}
public static CompletableFuture<String> mergeWorld(String s) {
CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
return s + " World!";
});
return completableFuture;
}
public static void print(String str) {
CompletableFuture.runAsync(() -> System.out.println(str));
}
private static void usingAsyncAwait() {
try {
String hello = await(hello());
String helloWorld = await(mergeWorld(hello));
await(CompletableFuture.runAsync(() -> print(helloWorld)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,183 @@
package com.baeldung.async;
import static com.ea.async.Async.await;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import com.google.common.util.concurrent.AsyncCallable;
import com.google.common.util.concurrent.Callables;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.jcabi.aspects.Async;
import com.jcabi.aspects.Loggable;
public class JavaAsync {
static {
com.ea.async.Async.init();
}
private static final ExecutorService threadpool = Executors.newCachedThreadPool();
public static void main (String[] args) throws InterruptedException, ExecutionException {
int number = 20;
//Thread Example
factorialUsingThread(number).start();
//FutureTask Example
Future<Long> futureTask = factorialUsingFutureTask(number);
System.out.println("Factorial of " + number + " is: " + futureTask.get());
// CompletableFuture Example
Future<Long> completableFuture = factorialUsingCompletableFuture(number);
System.out.println("Factorial of " + number + " is: " + completableFuture.get());
// EA Async example
System.out.println("Factorial of " + number + " is: " + factorialUsingEAAsync(number));
// cactoos async example
Future<Long> asyncFuture = factorialUsingCactoos(number);
System.out.println("Factorial of " + number + " is: " + asyncFuture.get());
// Guava example
ListenableFuture<Long> guavaFuture = factorialUsingGuavaServiceSubmit(number);
System.out.println("Factorial of " + number + " is: " + guavaFuture.get());
ListenableFuture<Long> guavaFutures = factorialUsingGuavaFutures(number);
System.out.println("Factorial of " + number + " is: " + guavaFutures.get());
// @async jcabi-aspect example
Future<Long> aspectFuture = factorialUsingJcabiAspect(number);
System.out.println("Factorial of " + number + " is: " + aspectFuture.get());
}
/**
* Finds factorial of a number
* @param number
* @return
*/
public static long factorial(int number) {
long result = 1;
for(int i=number;i>0;i--) {
result *= i;
}
return result;
}
/**
* Finds factorial of a number using Thread
* @param number
* @return
*/
@Loggable
public static Thread factorialUsingThread(int number) {
Thread newThread = new Thread(() -> {
System.out.println("Factorial of " + number + " is: " + factorial(number));
});
return newThread;
}
/**
* Finds factorial of a number using FutureTask
* @param number
* @return
*/
@Loggable
public static Future<Long> factorialUsingFutureTask(int number) {
Future<Long> futureTask = threadpool.submit(() -> factorial(number));
while (!futureTask.isDone()) {
System.out.println("FutureTask is not finished yet...");
}
return futureTask;
}
/**
* Finds factorial of a number using CompletableFuture
* @param number
* @return
*/
@Loggable
public static Future<Long> factorialUsingCompletableFuture(int number) {
CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
return completableFuture;
}
/**
* Finds factorial of a number using EA Async
* @param number
* @return
*/
@Loggable
public static long factorialUsingEAAsync(int number) {
CompletableFuture<Long> completableFuture = CompletableFuture.supplyAsync(() -> factorial(number));
long result = await(completableFuture);
return result;
}
/**
* Finds factorial of a number using Async of Cactoos
* @param number
* @return
* @throws InterruptedException
* @throws ExecutionException
*/
@Loggable
public static Future<Long> factorialUsingCactoos(int number) throws InterruptedException, ExecutionException {
org.cactoos.func.Async<Integer, Long> asyncFunction = new org.cactoos.func.Async<Integer, Long>(input -> factorial(input));
Future<Long> asyncFuture = asyncFunction.apply(number);
return asyncFuture;
}
/**
* Finds factorial of a number using Guava's ListeningExecutorService.submit()
* @param number
* @return
*/
@Loggable
public static ListenableFuture<Long> factorialUsingGuavaServiceSubmit(int number) {
ListeningExecutorService service = MoreExecutors.listeningDecorator(threadpool);
ListenableFuture<Long> factorialFuture = (ListenableFuture<Long>) service.submit(()-> factorial(number));
return factorialFuture;
}
/**
* Finds factorial of a number using Guava's Futures.submitAsync()
* @param number
* @return
*/
@Loggable
public static ListenableFuture<Long> factorialUsingGuavaFutures(int number) {
ListeningExecutorService service = MoreExecutors.listeningDecorator(threadpool);
AsyncCallable<Long> asyncCallable = Callables.asAsyncCallable(new Callable<Long>() {
public Long call() {
return factorial(number);
}
}, service);
return Futures.submitAsync(asyncCallable, service);
}
/**
* Finds factorial of a number using @Async of jcabi-aspects
* @param number
* @return
*/
@Async
@Loggable
public static Future<Long> factorialUsingJcabiAspect(int number) {
Future<Long> factorialFuture = CompletableFuture.supplyAsync(() -> factorial(number));
return factorialFuture;
}
}
@@ -1,6 +1,7 @@
package com.baeldung.rejection;
import org.junit.After;
import org.junit.Ignore;
import org.junit.Test;
import java.util.ArrayList;
@@ -28,6 +29,7 @@ public class SaturationPolicyUnitTest {
}
}
@Ignore
@Test
public void givenAbortPolicy_WhenSaturated_ThenShouldThrowRejectedExecutionException() {
executor = new ThreadPoolExecutor(1, 1, 0, MILLISECONDS, new SynchronousQueue<>(), new AbortPolicy());
@@ -36,6 +38,7 @@ public class SaturationPolicyUnitTest {
assertThatThrownBy(() -> executor.execute(() -> System.out.println("Will be rejected"))).isInstanceOf(RejectedExecutionException.class);
}
@Ignore
@Test
public void givenCallerRunsPolicy_WhenSaturated_ThenTheCallerThreadRunsTheTask() {
executor = new ThreadPoolExecutor(1, 1, 0, MILLISECONDS, new SynchronousQueue<>(), new CallerRunsPolicy());
@@ -1,6 +1,5 @@
## Java Date/time computations Cookbooks and Examples
This module contains articles about date and time computations in Java.
## Core Date Operations (Part 1)
This module contains articles about date operations in Java.
### Relevant Articles:
- [Difference Between Two Dates in Java](http://www.baeldung.com/java-date-difference)
@@ -13,3 +12,4 @@ This module contains articles about date and time computations in Java.
- [Increment Date in Java](http://www.baeldung.com/java-increment-date)
- [Add Hours To a Date In Java](http://www.baeldung.com/java-add-hours-date)
- [Introduction to Joda-Time](http://www.baeldung.com/joda-time)
- [[Next -->]](/core-java-modules/core-java-date-operations-2)
@@ -2,9 +2,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>core-java-datetime-computations</artifactId>
<artifactId>core-java-date-operations-1</artifactId>
<version>${project.parent.version}</version>
<name>core-java-datetime-computations</name>
<name>core-java-date-operations-1</name>
<packaging>jar</packaging>
<parent>
@@ -41,7 +41,7 @@
</dependencies>
<build>
<finalName>core-java-datetime-computations</finalName>
<finalName>core-java-date-operations-1</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
@@ -1,4 +1,4 @@
## Core Date Operations
## Core Date Operations (Part 2)
This module contains articles about date operations in Java.
### Relevant Articles:
@@ -6,3 +6,4 @@ This module contains articles about date operations in Java.
- [Skipping Weekends While Adding Days to LocalDate in Java 8](https://www.baeldung.com/java-localdate-add-days-skip-weekends)
- [Checking If Two Java Dates Are on the Same Day](https://www.baeldung.com/java-check-two-dates-on-same-day)
- [Converting Java Date to OffsetDateTime](https://www.baeldung.com/java-convert-date-to-offsetdatetime)
- [[<-- Prev]](/core-java-modules/core-java-date-operations-1)
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>core-java-date-operations</artifactId>
<artifactId>core-java-date-operations-2</artifactId>
<version>${project.parent.version}</version>
<name>core-java-date-operations</name>
<name>core-java-date-operations-2</name>
<packaging>jar</packaging>
<parent>
@@ -31,11 +31,18 @@
<artifactId>hirondelle-date4j</artifactId>
<version>${hirondelle-date4j.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<joda-time.version>2.10</joda-time.version>
<hirondelle-date4j.version>1.5.1</hirondelle-date4j.version>
<assertj.version>3.14.0</assertj.version>
</properties>
</project>
@@ -1,65 +1,65 @@
package com.baeldung.date.comparison;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import org.apache.commons.lang3.time.DateUtils;
import hirondelle.date4j.DateTime;
public class DateComparisonUtils {
public static boolean isSameDayUsingLocalDate(Date date1, Date date2) {
LocalDate localDate1 = date1.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDate localDate2 = date2.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
return localDate1.isEqual(localDate2);
}
public static boolean isSameDayUsingInstant(Date date1, Date date2) {
Instant instant1 = date1.toInstant()
.truncatedTo(ChronoUnit.DAYS);
Instant instant2 = date2.toInstant()
.truncatedTo(ChronoUnit.DAYS);
return instant1.equals(instant2);
}
public static boolean isSameDayUsingSimpleDateFormat(Date date1, Date date2) {
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1)
.equals(fmt.format(date2));
}
public static boolean isSameDayUsingCalendar(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);
return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH) && calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
}
public static boolean isSameDayUsingApacheCommons(Date date1, Date date2) {
return DateUtils.isSameDay(date1, date2);
}
public static boolean isSameDayUsingJoda(Date date1, Date date2) {
org.joda.time.LocalDate localDate1 = new org.joda.time.LocalDate(date1);
org.joda.time.LocalDate localDate2 = new org.joda.time.LocalDate(date2);
return localDate1.equals(localDate2);
}
public static boolean isSameDayUsingDate4j(Date date1, Date date2) {
DateTime dateObject1 = DateTime.forInstant(date1.getTime(), TimeZone.getDefault());
DateTime dateObject2 = DateTime.forInstant(date2.getTime(), TimeZone.getDefault());
return dateObject1.isSameDayAs(dateObject2);
}
}
package com.baeldung.date.comparison;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import org.apache.commons.lang3.time.DateUtils;
import hirondelle.date4j.DateTime;
public class DateComparisonUtils {
public static boolean isSameDayUsingLocalDate(Date date1, Date date2) {
LocalDate localDate1 = date1.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDate localDate2 = date2.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
return localDate1.isEqual(localDate2);
}
public static boolean isSameDayUsingInstant(Date date1, Date date2) {
Instant instant1 = date1.toInstant()
.truncatedTo(ChronoUnit.DAYS);
Instant instant2 = date2.toInstant()
.truncatedTo(ChronoUnit.DAYS);
return instant1.equals(instant2);
}
public static boolean isSameDayUsingSimpleDateFormat(Date date1, Date date2) {
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1)
.equals(fmt.format(date2));
}
public static boolean isSameDayUsingCalendar(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);
return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH) && calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
}
public static boolean isSameDayUsingApacheCommons(Date date1, Date date2) {
return DateUtils.isSameDay(date1, date2);
}
public static boolean isSameDayUsingJoda(Date date1, Date date2) {
org.joda.time.LocalDate localDate1 = new org.joda.time.LocalDate(date1);
org.joda.time.LocalDate localDate2 = new org.joda.time.LocalDate(date2);
return localDate1.equals(localDate2);
}
public static boolean isSameDayUsingDate4j(Date date1, Date date2) {
DateTime dateObject1 = DateTime.forInstant(date1.getTime(), TimeZone.getDefault());
DateTime dateObject2 = DateTime.forInstant(date2.getTime(), TimeZone.getDefault());
return dateObject1.isSameDayAs(dateObject2);
}
}
@@ -0,0 +1,19 @@
package com.baeldung.timer;
import java.util.List;
import java.util.TimerTask;
public class DatabaseMigrationTask extends TimerTask {
private List<String> oldDatabase;
private List<String> newDatabase;
public DatabaseMigrationTask(List<String> oldDatabase, List<String> newDatabase) {
this.oldDatabase = oldDatabase;
this.newDatabase = newDatabase;
}
@Override
public void run() {
newDatabase.addAll(oldDatabase);
}
}
@@ -0,0 +1,14 @@
package com.baeldung.timer;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.TimerTask;
public class NewsletterTask extends TimerTask {
@Override
public void run() {
System.out.println("Email sent at: "
+ LocalDateTime.ofInstant(Instant.ofEpochMilli(scheduledExecutionTime()), ZoneId.systemDefault()));
}
}
@@ -1,57 +1,57 @@
package com.baeldung.date.comparison;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import org.junit.Test;
public class DateComparisonUtilsUnitTest {
private Date day1Morning = toDate(LocalDateTime.of(2019, 10, 19, 6, 30, 40));
private Date day1Evening = toDate(LocalDateTime.of(2019, 10, 19, 18, 30, 50));
private Date day2Morning = toDate(LocalDateTime.of(2019, 10, 20, 6, 30, 50));
private Date toDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault())
.toInstant());
}
@Test
public void givenDatesWithDifferentTime_whenIsSameDay_thenReturnsTrue() {
assertTrue(DateComparisonUtils.isSameDayUsingLocalDate(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingInstant(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingSimpleDateFormat(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingCalendar(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingApacheCommons(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingJoda(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingDate4j(day1Morning, day1Evening));
}
@Test
public void givenDates_whenIsDifferentDay_thenReturnsFalse() {
assertFalse(DateComparisonUtils.isSameDayUsingLocalDate(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingLocalDate(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingInstant(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingInstant(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingSimpleDateFormat(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingSimpleDateFormat(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingCalendar(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingCalendar(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingApacheCommons(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingApacheCommons(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingJoda(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingJoda(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingDate4j(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingDate4j(day1Evening, day2Morning));
}
}
package com.baeldung.date.comparison;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import org.junit.Test;
public class DateComparisonUtilsUnitTest {
private Date day1Morning = toDate(LocalDateTime.of(2019, 10, 19, 6, 30, 40));
private Date day1Evening = toDate(LocalDateTime.of(2019, 10, 19, 18, 30, 50));
private Date day2Morning = toDate(LocalDateTime.of(2019, 10, 20, 6, 30, 50));
private Date toDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault())
.toInstant());
}
@Test
public void givenDatesWithDifferentTime_whenIsSameDay_thenReturnsTrue() {
assertTrue(DateComparisonUtils.isSameDayUsingLocalDate(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingInstant(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingSimpleDateFormat(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingCalendar(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingApacheCommons(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingJoda(day1Morning, day1Evening));
assertTrue(DateComparisonUtils.isSameDayUsingDate4j(day1Morning, day1Evening));
}
@Test
public void givenDates_whenIsDifferentDay_thenReturnsFalse() {
assertFalse(DateComparisonUtils.isSameDayUsingLocalDate(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingLocalDate(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingInstant(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingInstant(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingSimpleDateFormat(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingSimpleDateFormat(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingCalendar(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingCalendar(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingApacheCommons(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingApacheCommons(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingJoda(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingJoda(day1Evening, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingDate4j(day1Morning, day2Morning));
assertFalse(DateComparisonUtils.isSameDayUsingDate4j(day1Evening, day2Morning));
}
}
@@ -0,0 +1,44 @@
package com.baeldung.timer;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import static org.assertj.core.api.Assertions.assertThat;
class DatabaseMigrationTaskUnitTest {
@Test
void givenDatabaseMigrationTask_whenTimerScheduledForNowPlusTwoSeconds_thenDataMigratedAfterTwoSeconds() throws Exception {
List<String> oldDatabase = Arrays.asList("Harrison Ford", "Carrie Fisher", "Mark Hamill");
List<String> newDatabase = new ArrayList<>();
LocalDateTime twoSecondsLater = LocalDateTime.now().plusSeconds(2);
Date twoSecondsLaterAsDate = Date.from(twoSecondsLater.atZone(ZoneId.systemDefault()).toInstant());
new Timer().schedule(new DatabaseMigrationTask(oldDatabase, newDatabase), twoSecondsLaterAsDate);
while (LocalDateTime.now().isBefore(twoSecondsLater)) {
assertThat(newDatabase).isEmpty();
Thread.sleep(500);
}
assertThat(newDatabase).containsExactlyElementsOf(oldDatabase);
}
@Test
void givenDatabaseMigrationTask_whenTimerScheduledInTwoSeconds_thenDataMigratedAfterTwoSeconds() throws Exception {
List<String> oldDatabase = Arrays.asList("Harrison Ford", "Carrie Fisher", "Mark Hamill");
List<String> newDatabase = new ArrayList<>();
new Timer().schedule(new DatabaseMigrationTask(oldDatabase, newDatabase), 2000);
LocalDateTime twoSecondsLater = LocalDateTime.now().plusSeconds(2);
while (LocalDateTime.now().isBefore(twoSecondsLater)) {
assertThat(newDatabase).isEmpty();
Thread.sleep(500);
}
assertThat(newDatabase).containsExactlyElementsOf(oldDatabase);
}
}
@@ -0,0 +1,33 @@
package com.baeldung.timer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.Timer;
class NewsletterTaskUnitTest {
private final Timer timer = new Timer();
@AfterEach
void afterEach() {
timer.cancel();
}
@Test
void givenNewsletterTask_whenTimerScheduledEachSecondFixedDelay_thenNewsletterSentEachSecond() throws Exception {
timer.schedule(new NewsletterTask(), 0, 1000);
for (int i = 0; i < 3; i++) {
Thread.sleep(1000);
}
}
@Test
void givenNewsletterTask_whenTimerScheduledEachSecondFixedRate_thenNewsletterSentEachSecond() throws Exception {
timer.scheduleAtFixedRate(new NewsletterTask(), 0, 1000);
for (int i = 0; i < 3; i++) {
Thread.sleep(1000);
}
}
}
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>core-java-datetime-java8</artifactId>
<version>${project.parent.version}</version>
<name>core-java-datetime-java8</name>
<packaging>jar</packaging>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-java</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-java</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>core-java-datetime-java8</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>1.9</maven.compiler.source>
<maven.compiler.target>1.9</maven.compiler.target>
<joda-time.version>2.10</joda-time.version>
<!-- testing -->
<assertj.version>3.6.1</assertj.version>
</properties>
</project>
@@ -0,0 +1,31 @@
package com.baeldung.localdate;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
public class LocalDateExample {
public LocalDate getCustomDateOne(int year, int month, int dayOfMonth) {
return LocalDate.of(year, month, dayOfMonth);
}
public LocalDate getCustomDateTwo(int year, Month month, int dayOfMonth) {
return LocalDate.of(year, month, dayOfMonth);
}
public LocalDate getDateFromEpochDay(long epochDay) {
return LocalDate.ofEpochDay(epochDay);
}
public LocalDate getDateFromYearAndDayOfYear(int year, int dayOfYear) {
return LocalDate.ofYearDay(year, dayOfYear);
}
public LocalDate getDateFromString(String date) {
return LocalDate.parse(date);
}
public LocalDate getDateFromStringAndFormatter(String date, String pattern) {
return LocalDate.parse(date, DateTimeFormatter.ofPattern(pattern));
}
}
@@ -0,0 +1,41 @@
package com.baeldung.localdate;
import static org.junit.Assert.assertEquals;
import java.time.Month;
import org.junit.Test;
public class LocalDateExampleUnitTest {
private LocalDateExample date = new LocalDateExample();
@Test
public void givenValues_whenUsingOfMethod_thenLocalDate() {
assertEquals("2020-01-08", date.getCustomDateOne(2020, 1, 8));
}
@Test
public void givenValuesWithMonthEnum_whenUsingOfMethod_thenLocalDate() {
assertEquals("2020-01-08", date.getCustomDateTwo(2020, Month.JANUARY, 8));
}
@Test
public void givenValues_whenUsingEpochDay_thenLocalDate() {
assertEquals("2020-01-08", date.getDateFromEpochDay(18269));
}
@Test
public void givenValues_whenUsingYearDay_thenLocalDate() {
assertEquals("2020-01-08", date.getDateFromYearAndDayOfYear(2020, 8));
}
@Test
public void givenValues_whenUsingParse_thenLocalDate() {
assertEquals("2020-01-08", date.getDateFromString("2020-01-08"));
}
@Test
public void givenValuesWithFormatter_whenUsingParse_thenLocalDate() {
assertEquals("2020-01-08", date.getDateFromStringAndFormatter("8-Jan-2020", "d-MMM-yyyy"));
}
}
@@ -1,5 +1,6 @@
package com.baeldung.file;
import org.junit.Ignore;
import org.junit.Test;
import java.io.*;
@@ -73,6 +74,7 @@ public class FileClassUnitTest {
assertFalse(writable);
}
@Ignore
@Test
public void givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile() {
File parentDir = makeDir("writeDir");
+4 -2
View File
@@ -207,8 +207,8 @@
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
@@ -397,6 +397,8 @@
<maven-shade-plugin.version>3.1.1</maven-shade-plugin.version>
<spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version>
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
<source.version>1.8</source.version>
<target.version>1.8</target.version>
</properties>
</project>
+23 -10
View File
@@ -9,44 +9,49 @@
<name>core-java-jndi</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<groupId>com.baeldung.core-java-modules</groupId>
<artifactId>core-java-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../../</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.9.RELEASE</version>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.9.RELEASE</version>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.9.RELEASE</version>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.9.RELEASE</version>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
<version>${h2.version}</version>
</dependency>
</dependencies>
@@ -56,11 +61,19 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<spring.version>5.0.9.RELEASE</spring.version>
<h2.version>1.4.199</h2.version>
<jupiter.version>5.5.1</jupiter.version>
<source.version>1.8</source.version>
<target.version>1.8</target.version>
</properties>
</project>
@@ -1,5 +1,12 @@
package com.baeldung.jndi.exceptions;
import static org.junit.jupiter.api.Assertions.assertThrows;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.naming.NoInitialContextException;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
@@ -7,15 +14,10 @@ import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.jndi.JndiTemplate;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.naming.NoInitialContextException;
import static org.junit.jupiter.api.Assertions.assertThrows;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JndiExceptionsUnitTest {
@Disabled
@Test
@Order(1)
void givenNoContext_whenLookupObject_thenThrowNoInitialContext() {
@@ -16,7 +16,7 @@
<dependency>
<groupId>com.baeldung.servicemodule</groupId>
<artifactId>servicemodule</artifactId>
<version>1.0</version>
<version>${servicemodule.version}</version>
</dependency>
</dependencies>
@@ -29,4 +29,8 @@
</plugins>
</build>
<properties>
<servicemodule.version>1.0</servicemodule.version>
</properties>
</project>
@@ -19,10 +19,10 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<version>${compiler.plugin.version}</version>
<configuration>
<source>11</source>
<target>11</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
@@ -31,6 +31,9 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<compiler.plugin.version>3.8.0</compiler.plugin.version>
<source.version>11</source.version>
<target.version>11</target.version>
</properties>
</project>
@@ -2,7 +2,6 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.servicemodule</groupId>
<artifactId>servicemodule</artifactId>
<packaging>jar</packaging>
@@ -8,8 +8,8 @@
<version>1.0</version>
<parent>
<groupId>decoupling-pattern2</groupId>
<artifactId>com.baeldung.decoupling-pattern2</artifactId>
<groupId>com.baeldung.decoupling-pattern2</groupId>
<artifactId>decoupling-pattern2</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
@@ -17,12 +17,12 @@
<dependency>
<groupId>com.baeldung.servicemodule</groupId>
<artifactId>servicemodule</artifactId>
<version>1.0</version>
<version>${servicemodule.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.providermodule</groupId>
<artifactId>providermodule</artifactId>
<version>1.0</version>
<version>${providermodule.version}</version>
</dependency>
</dependencies>
@@ -34,5 +34,10 @@
</plugin>
</plugins>
</build>
<properties>
<servicemodule.version>1.0</servicemodule.version>
<providermodule.version>1.0</providermodule.version>
</properties>
</project>
@@ -20,14 +20,20 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<version>${compiler.plugin.version}</version>
<configuration>
<source>11</source>
<target>11</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<properties>
<compiler.plugin.version>3.8.0</compiler.plugin.version>
<source.version>11</source.version>
<target.version>11</target.version>
</properties>
</project>
@@ -8,8 +8,8 @@
<version>1.0</version>
<parent>
<groupId>decoupling-pattern2</groupId>
<artifactId>com.baeldung.decoupling-pattern2</artifactId>
<groupId>com.baeldung.decoupling-pattern2</groupId>
<artifactId>decoupling-pattern2</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
@@ -17,7 +17,7 @@
<dependency>
<groupId>com.baeldung.servicemodule</groupId>
<artifactId>servicemodule</artifactId>
<version>1.0</version>
<version>${servicemodule.version}</version>
</dependency>
</dependencies>
@@ -30,4 +30,9 @@
</plugins>
</build>
<properties>
<servicemodule.version>1.0</servicemodule.version>
</properties>
</project>
@@ -3,13 +3,12 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.servicemodule</groupId>
<artifactId>servicemodule</artifactId>
<version>1.0</version>
<parent>
<groupId>decoupling-pattern2</groupId>
<artifactId>>com.baeldung.decoupling-pattern2</artifactId>
<groupId>com.baeldung.decoupling-pattern2</groupId>
<artifactId>decoupling-pattern2</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>core-java-jpms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>core-java-jpms</name>
<packaging>pom</packaging>
<parent>
<groupId>com.baeldung.core-java-modules</groupId>
<artifactId>core-java-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modules>
<module>decoupling-pattern1</module>
<module>decoupling-pattern2</module>
</modules>
</project>
@@ -2,7 +2,7 @@ package com.baeldung.exitvshalt;
import org.junit.Test;
public class JvmExitDemoUnitTest {
public class JvmExitDemoManualTest {
JvmExitAndHaltDemo jvmExitAndHaltDemo = new JvmExitAndHaltDemo();
@@ -2,7 +2,7 @@ package com.baeldung.exitvshalt;
import org.junit.Test;
public class JvmHaltDemoUnitTest {
public class JvmHaltDemoManualTest {
JvmExitAndHaltDemo jvmExitAndHaltDemo = new JvmExitAndHaltDemo();
+2 -1
View File
@@ -18,7 +18,7 @@
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
<version>${commons.beanutils.version}</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
@@ -57,6 +57,7 @@
<jmh-core.version>1.19</jmh-core.version>
<jmh-generator.version>1.19</jmh-generator.version>
<assertj.version>3.12.2</assertj.version>
<commons.beanutils.version>1.9.4</commons.beanutils.version>
</properties>
</project>
@@ -1,7 +1,5 @@
package com.baeldung.powerset;
import com.google.common.collect.Sets;
import javax.annotation.Nullable;
import java.util.AbstractSet;
import java.util.ArrayList;
@@ -163,7 +161,7 @@ public class PowerSetUtility<T> {
return unMapIndex(powerSetIndices);
}
private List<List<Boolean>> iterativePowerSetByLoopOverNumbersWithReverseLexicographicalOrder(int n) {
private List<List<Boolean>> iterativePowerSetByLoopOverNumbers(int n) {
List<List<Boolean>> powerSet = new ArrayList<>();
for (int i = 0; i < (1 << n); i++) {
List<Boolean> subset = new ArrayList<>(n);
@@ -174,7 +172,7 @@ public class PowerSetUtility<T> {
return powerSet;
}
private List<List<Boolean>> iterativePowerSetByLoopOverNumbersWithGrayCodeOrder(int n) {
private List<List<Boolean>> iterativePowerSetByLoopOverNumbersWithMinimalChange(int n) {
List<List<Boolean>> powerSet = new ArrayList<>();
for (int i = 0; i < (1 << n); i++) {
List<Boolean> subset = new ArrayList<>(n);
@@ -195,32 +193,16 @@ public class PowerSetUtility<T> {
public List<List<T>> iterativePowerSetByLoopOverNumbers(Set<T> set) {
initializeMap(set);
List<List<Boolean>> sets = iterativePowerSetByLoopOverNumbersWithReverseLexicographicalOrder(set.size());
List<List<Boolean>> sets = iterativePowerSetByLoopOverNumbers(set.size());
return unMapListBinary(sets);
}
public List<List<T>> iterativePowerSetByLoopOverNumbersMinimalChange(Set<T> set) {
initializeMap(set);
List<List<Boolean>> sets = iterativePowerSetByLoopOverNumbersWithGrayCodeOrder(set.size());
List<List<Boolean>> sets = iterativePowerSetByLoopOverNumbersWithMinimalChange(set.size());
return unMapListBinary(sets);
}
public static int getRankInLexicographicalOrder(List<Boolean> subset) {
int rank = 0;
for (int i = 0; i < subset.size(); i++)
if (subset.get(i))
rank += (1 << (subset.size() - i - 1));
return rank;
}
public static List<Boolean> getSubsetForRankInLexicographicalOrder(int rank, int sizeOfSet) {
Boolean[] subset = new Boolean[sizeOfSet];
for(int j = 0; j < sizeOfSet; j++) {
subset[sizeOfSet - j - 1] = ((rank & (1 << j)) > 0);
}
return Arrays.asList(subset);
}
private Set<Set<Integer>> recursivePowerSetIndexRepresentation(int idx, int n) {
if (idx == n) {
Set<Set<Integer>> empty = new HashSet<>();
@@ -137,7 +137,7 @@ public class PowerSetUtilityUnitTest {
}
@Test
public void givenSet_WhenPowerSetIsCalculatedIterativePowerSetByLoopOverNumbersMinimalChange_ThenItContainsAllSubsetsInGrayOrder() {
public void givenSet_WhenPowerSetIsCalculatedIterativePowerSetByLoopOverNumbersWithMinimalChange_ThenItContainsAllSubsets() {
Set<String> set = RandomSetOfStringGenerator.generateRandomSet();
List<List<String>> powerSet = new PowerSetUtility<String>().iterativePowerSetByLoopOverNumbersMinimalChange(set);
@@ -172,42 +172,6 @@ public class PowerSetUtilityUnitTest {
}
}
@Test
public void givenSubset_WhenPowerSetIsInLexicographicalOrder_ReturnCorrectRank() {
int n = new Random().nextInt(5) + 5; //a number in [5, 10)
for(int i = 0; i < ( 1 << n); i++) {
Boolean[] subset = new Boolean[n];
for(int j=0; j < n; j++) {
subset[n - j - 1] = ((i & (1 << j)) > 0);
}
Assertions.assertEquals(i, PowerSetUtility.getRankInLexicographicalOrder(Arrays.asList(subset)));
}
}
@Test
public void givenRanking_WhenPowerSetIsInLexicographicalOrder_ReturnTheSubset() {
int n = new Random().nextInt(5) + 5; //a number in [5, 10)
List<List<Boolean>> powerSet = new ArrayList<>();
for(int i = 0; i < (1 << n); i++) {
powerSet.add(PowerSetUtility.getSubsetForRankInLexicographicalOrder(i, n));
}
//To make sure that the size of power set is (2 power n)
MatcherAssert.assertThat(powerSet, IsCollectionWithSize.hasSize((1 << n)));
//To make sure that number of occurrence of each index is (2 power n-1)
Map<Integer, Integer> counter = new HashMap<>();
for (List<Boolean> subset : powerSet) {
for (int i = 0; i < subset.size(); i++) {
if(subset.get(i)) {
int num = counter.getOrDefault(i, 0);
counter.put(i, num + 1);
}
}
}
counter.forEach((k, v) -> Assertions.assertEquals((1 << (n - 1)), v.intValue()));
//To make sure that one subset is not generated twice
Assertions.assertEquals(powerSet.size(), new HashSet<>(powerSet).size());
}
static class RandomSetOfStringGenerator {
private static List<String> fruits = Arrays.asList("Apples", "Avocados", "Banana", "Blueberry", "Cherry", "Clementine", "Cucumber", "Date", "Fig",
"Grapefruit"/*, "Grape", "Kiwi", "Lemon", "Mango", "Mulberry", "Melon", "Nectarine", "Olive", "Orange"*/);
@@ -6,7 +6,7 @@ import org.junit.Test;
public class TernaryOperatorUnitTest {
@Test
public void givenACondition_whenUsingTernaryOperator_thenItEvaluatesConditionAndReturnsAValue() {
public void whenUsingTernaryOperator_thenConditionIsEvaluatedAndValueReturned() {
int number = 10;
String msg = number > 10 ? "Number is greater than 10" : "Number is less than or equal to 10";
@@ -14,7 +14,7 @@ public class TernaryOperatorUnitTest {
}
@Test
public void givenATrueCondition_whenUsingTernaryOperator_thenOnlyExpression1IsEvaluated() {
public void whenConditionIsTrue_thenOnlyFirstExpressionIsEvaluated() {
int exp1 = 0, exp2 = 0;
int result = 12 > 10 ? ++exp1 : ++exp2;
@@ -24,7 +24,7 @@ public class TernaryOperatorUnitTest {
}
@Test
public void givenAFalseCondition_whenUsingTernaryOperator_thenOnlyExpression2IsEvaluated() {
public void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated() {
int exp1 = 0, exp2 = 0;
int result = 8 > 10 ? ++exp1 : ++exp2;
@@ -1,6 +1,8 @@
package com.baeldung.optional;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class Person {
private String name;
@@ -21,7 +23,7 @@ public class Person {
}
public Optional<Integer> getAge() {
return Optional.ofNullable(age);
return Optional.of(age);
}
public void setAge(int age) {
@@ -36,4 +38,37 @@ public class Person {
return Optional.ofNullable(password);
}
public static List<Person> search(List<Person> people, String name, Optional<Integer> age) {
// Null checks for people and name
return people.stream()
.filter(p -> p.getName().equals(name))
.filter(p -> p.getAge().get() >= age.orElse(0))
.collect(Collectors.toList());
}
public static List<Person> search(List<Person> people, String name, Integer age) {
// Null checks for people and name
final Integer ageFilter = age != null ? age : 0;
return people.stream()
.filter(p -> p.getName().equals(name))
.filter(p -> p.getAge().get() >= ageFilter)
.collect(Collectors.toList());
}
public static List<Person> search(List<Person> people, String name) {
return doSearch(people, name, 0);
}
public static List<Person> search(List<Person> people, String name, int age) {
return doSearch(people, name, age);
}
private static List<Person> doSearch(List<Person> people, String name, int age) {
// Null checks for people and name
return people.stream()
.filter(p -> p.getName().equals(name))
.filter(p -> p.getAge().get().intValue() >= age)
.collect(Collectors.toList());
}
}
@@ -37,8 +37,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>${source.version}</source>
<target>${target.version}</target>
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
@@ -48,5 +48,7 @@
<properties>
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
<assertj-core.version>3.10.0</assertj-core.version>
<source.version>1.8</source.version>
<target.version>1.8</target.version>
</properties>
</project>
@@ -0,0 +1,7 @@
package com.baeldung.reflection.exception.invocationtarget;
public class InvocationTargetExample {
public int divideByZeroExample() {
return 1 / 0;
}
}
@@ -0,0 +1,23 @@
package com.baeldung.reflection.exception.invocationtarget;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.jupiter.api.Test;
public class InvocationTargetUnitTest {
@Test
public void whenCallingMethodThrowsException_thenAssertCauseOfInvocationTargetException() throws Exception {
InvocationTargetExample targetExample = new InvocationTargetExample();
Method method = InvocationTargetExample.class.getMethod("divideByZeroExample");
Exception exception = assertThrows(InvocationTargetException.class, () -> method.invoke(targetExample));
assertEquals(ArithmeticException.class, exception.getCause().getClass());
}
}
@@ -25,7 +25,7 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
<version>${guava.version}</version>
</dependency>
<dependency>
@@ -62,7 +62,7 @@
<properties>
<commons-lang3.version>3.8.1</commons-lang3.version>
<assertj.version>3.6.1</assertj.version>
<guava.version>27.0.1-jre</guava.version>
<guava.version>28.1-jre</guava.version>
<junit-jupiter-api.version>5.3.1</junit-jupiter-api.version>
</properties>
@@ -0,0 +1,63 @@
package com.baeldung.regex.matcher;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.jupiter.api.Test;
public class MatcherUnitTest {
@Test
public void whenFindFourDigitWorks_thenCorrect() {
Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d");
Matcher m = stringPattern.matcher("goodbye 2019 and welcome 2020");
assertTrue(m.find());
assertEquals(8, m.start());
assertEquals("2019", m.group());
assertEquals(12, m.end());
assertTrue(m.find());
assertEquals(25, m.start());
assertEquals("2020", m.group());
assertEquals(29, m.end());
assertFalse(m.find());
}
@Test
public void givenStartIndex_whenFindFourDigitWorks_thenCorrect() {
Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d");
Matcher m = stringPattern.matcher("goodbye 2019 and welcome 2020");
assertTrue(m.find(20));
assertEquals(25, m.start());
assertEquals("2020", m.group());
assertEquals(29, m.end());
}
@Test
public void whenMatchFourDigitWorks_thenFail() {
Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d");
Matcher m = stringPattern.matcher("goodbye 2019 and welcome 2020");
assertFalse(m.matches());
}
@Test
public void whenMatchFourDigitWorks_thenCorrect() {
Pattern stringPattern = Pattern.compile("\\d\\d\\d\\d");
Matcher m = stringPattern.matcher("2019");
assertTrue(m.matches());
assertEquals(0, m.start());
assertEquals("2019", m.group());
assertEquals(4, m.end());
assertTrue(m.matches());// matches will always return the same return
}
}
+4 -2
View File
@@ -207,8 +207,8 @@
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
@@ -397,6 +397,8 @@
<maven-shade-plugin.version>3.1.1</maven-shade-plugin.version>
<spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version>
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
<source.version>1.8</source.version>
<target.version>1.8</target.version>
</properties>
</project>
@@ -17,17 +17,17 @@
<dependency>
<groupId>com.baeldung.entitymodule</groupId>
<artifactId>entitymodule</artifactId>
<version>1.0</version>
<version>${entitymodule.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.daomodule</groupId>
<artifactId>daomodule</artifactId>
<version>1.0</version>
<version>${daomodule.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.userdaomodule</groupId>
<artifactId>userdaomodule</artifactId>
<version>1.0</version>
<version>${userdaomodule.version}</version>
</dependency>
</dependencies>
@@ -43,6 +43,9 @@
<properties>
<maven.compiler.source>9</maven.compiler.source>
<maven.compiler.target>9</maven.compiler.target>
<entitymodule.version>1.0</entitymodule.version>
<daomodule.version>1.0</daomodule.version>
<userdaomodule.version>1.0</userdaomodule.version>
</properties>
</project>
@@ -45,10 +45,10 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<version>${compiler.plugin.version}</version>
<configuration>
<source>1.9</source>
<target>1.9</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
</plugins>
@@ -56,6 +56,9 @@
</build>
<properties>
<compiler.plugin.version>3.8.0</compiler.plugin.version>
<source.version>1.9</source.version>
<target.version>1.9</target.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<assertj-core.version>3.12.2</assertj-core.version>
</properties>
@@ -17,12 +17,12 @@
<dependency>
<groupId>com.baeldung.entitymodule</groupId>
<artifactId>entitymodule</artifactId>
<version>1.0</version>
<version>${entitymodule.version}</version>
</dependency>
<dependency>
<groupId>com.baeldung.daomodule</groupId>
<artifactId>daomodule</artifactId>
<version>1.0</version>
<version>${daomodule.version}</version>
</dependency>
</dependencies>
@@ -38,6 +38,8 @@
<properties>
<maven.compiler.source>9</maven.compiler.source>
<maven.compiler.target>9</maven.compiler.target>
<entitymodule.version>1.0</entitymodule.version>
<daomodule.version>1.0</daomodule.version>
</properties>
</project>
+102 -3
View File
@@ -14,11 +14,110 @@
</parent>
<modules>
<module>pre-jpms</module>
<module>core-java-optional</module>
<module>core-java</module>
<!-- <module>core-java-10</module> --> <!-- We haven't upgraded to java 10. Fixing in BAEL-10841 -->
<!-- <module>core-java-11</module> --> <!-- We haven't upgraded to java 11. Fixing in BAEL-10841 -->
<!-- <module>core-java-12</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 -->
<!-- <module>core-java-13</module> --> <!-- We haven't upgraded to java 12. Fixing in BAEL-10841 -->
<module>core-java-8</module>
<module>core-java-8-2</module>
<!-- <module>core-java-9</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<!-- <module>core-java-9-improvements</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<!-- <module>core-java-9-jigsaw</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<!-- <module>core-java-9-new-features</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<!-- <module>core-java-9-streams</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<module>core-java-annotations</module>
<module>core-java-arrays</module>
<module>core-java-arrays-2</module>
<module>core-java-collections</module>
<module>core-java-collections-2</module>
<module>core-java-collections-3</module>
<module>core-java-collections-array-list</module>
<module>core-java-collections-list</module>
<module>core-java-collections-list-2</module>
<module>core-java-collections-list-3</module>
<module>core-java-collections-set</module>
<module>core-java-concurrency-2</module>
<module>core-java-concurrency-advanced</module>
<module>core-java-concurrency-advanced-2</module>
<module>core-java-concurrency-advanced-3</module>
<module>core-java-concurrency-basic</module>
<module>core-java-concurrency-basic-2</module>
<module>core-java-concurrency-collections</module>
<!-- <module>core-java-date-operations-1</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<module>core-java-date-operations-2</module>
<!-- We haven't upgraded to java 9.-->
<!--
<module>core-java-datetime-computations</module>
<module>core-java-datetime-conversion</module>
<module>core-java-datetime-java8</module>
<module>core-java-datetime-string</module>
-->
<module>core-java-exceptions</module>
<module>core-java-exceptions-2</module>
<module>core-java-function</module>
<module>core-java-io</module>
<module>core-java-io-2</module>
<module>core-java-io-apis</module>
<module>core-java-io-conversions</module>
<module>core-java-jar</module>
<module>core-java-jndi</module>
<!-- <module>core-java-jpms</module> --> <!-- We haven't upgraded to java 10. Fixing in BAEL-10841 -->
<module>core-java-jvm</module>
<module>core-java-lambdas</module>
<module>core-java-lang</module>
<module>core-java-lang-2</module>
<module>core-java-lang-math</module>
<module>core-java-lang-oop</module>
<module>core-java-lang-oop-2</module>
<module>core-java-lang-oop-3</module>
<module>core-java-lang-oop-4</module>
<module>core-java-lang-operators</module>
<module>core-java-lang-syntax</module>
<module>core-java-lang-syntax-2</module>
<module>core-java-networking</module>
<module>core-java-networking-2</module>
<module>core-java-date-operations</module>
<module>core-java-nio</module>
<module>core-java-nio-2</module>
<module>core-java-optional</module>
<!--<module>core-java-os</module> --> <!-- We haven't upgraded to java 9.-->
<module>core-java-perf</module>
<module>core-java-reflection</module>
<module>core-java-security</module>
<module>core-java-streams</module>
<module>core-java-streams-2</module>
<module>core-java-streams-3</module>
<module>core-java-string-algorithms</module>
<module>core-java-string-algorithms-2</module>
<module>core-java-string-algorithms-3</module>
<module>core-java-string-apis</module>
<module>core-java-string-conversions</module>
<module>core-java-string-conversions-2</module>
<module>core-java-string-operations</module>
<module>core-java-string-operations-2</module>
<module>core-java-strings</module>
<module>core-java-sun</module>
<module>core-java-text</module>
<!-- <module>core-java-time-measurements</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<!-- <module>multimodulemavenproject</module> --> <!-- We haven't upgraded to java 9. Fixing in BAEL-10841 -->
<module>pre-jpms</module>
</modules>
</project>
+11 -4
View File
@@ -29,16 +29,16 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<version>${compiler.plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>${source.version}</source>
<target>${target.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<version>${dependency.plugin.version}</version>
<executions>
<execution>
<id>copy-dependencies</id>
@@ -69,5 +69,12 @@
</plugin>
</plugins>
</build>
<properties>
<dependency.plugin.version>3.1.1</dependency.plugin.version>
<compiler.plugin.version>3.8.0</compiler.plugin.version>
<source.version>1.8</source.version>
<target.version>1.8</target.version>
</properties>
</project>