commit
26f744b8fe
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -23,3 +23,4 @@
|
||||||
- [Converting Between Roman and Arabic Numerals in Java](http://www.baeldung.com/java-convert-roman-arabic)
|
- [Converting Between Roman and Arabic Numerals in Java](http://www.baeldung.com/java-convert-roman-arabic)
|
||||||
- [Practical Java Examples of the Big O Notation](http://www.baeldung.com/java-algorithm-complexity)
|
- [Practical Java Examples of the Big O Notation](http://www.baeldung.com/java-algorithm-complexity)
|
||||||
- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element)
|
- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element)
|
||||||
|
- [An Introduction to the Theory of Big-O Notation](http://www.baeldung.com/big-o-notation)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,2 @@
|
||||||
|
### Relevant Articles:
|
||||||
|
- [Guide to Apache Avro](http://www.baeldung.com/java-apache-avro)
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -8,9 +8,10 @@
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<artifactId>parent-boot-1</artifactId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<groupId>com.baeldung</groupId>
|
||||||
<version>1.5.2.RELEASE</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../parent-boot-1</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -10,10 +10,10 @@
|
||||||
<description>Demo project for Spring Boot</description>
|
<description>Demo project for Spring Boot</description>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<artifactId>parent-boot-1</artifactId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<groupId>com.baeldung</groupId>
|
||||||
<version>1.5.13.RELEASE</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<relativePath /> <!-- lookup parent from repository -->
|
<relativePath>../../parent-boot-1</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -3,3 +3,4 @@
|
||||||
|
|
||||||
- [Java 10 LocalVariable Type-Inference](http://www.baeldung.com/java-10-local-variable-type-inference)
|
- [Java 10 LocalVariable Type-Inference](http://www.baeldung.com/java-10-local-variable-type-inference)
|
||||||
- [Guide to Java 10](http://www.baeldung.com/java-10-overview)
|
- [Guide to Java 10](http://www.baeldung.com/java-10-overview)
|
||||||
|
- [Copy a List to Another List in Java](http://www.baeldung.com/java-copy-list-to-another)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -56,4 +56,7 @@
|
||||||
- [Generalized Target-Type Inference in Java](http://www.baeldung.com/java-generalized-target-type-inference)
|
- [Generalized Target-Type Inference in Java](http://www.baeldung.com/java-generalized-target-type-inference)
|
||||||
- [Image to Base64 String Conversion](http://www.baeldung.com/java-base64-image-string)
|
- [Image to Base64 String Conversion](http://www.baeldung.com/java-base64-image-string)
|
||||||
- [Calculate Age in Java](http://www.baeldung.com/java-get-age)
|
- [Calculate Age in Java](http://www.baeldung.com/java-get-age)
|
||||||
|
- [Copy a List to Another List in Java](http://www.baeldung.com/java-copy-list-to-another)
|
||||||
|
- [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)
|
- [Add Hours To a Date In Java](http://www.baeldung.com/java-add-hours-date)
|
||||||
|
- [Overriding System Time for Testing in Java](http://www.baeldung.com/java-override-system-time)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,72 @@
|
||||||
|
package com.baeldung.datetime;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class UseTimeZoneUnitTest {
|
||||||
|
|
||||||
|
/* https://en.wikipedia.org/wiki/List_of_tz_database_time_zones */
|
||||||
|
|
||||||
|
String timeZone = "Asia/Singapore";
|
||||||
|
|
||||||
|
private static final String PATTERN = "E yyyy-MM-dd HH:mm:ss a";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJava7_ThenTimeZoneIsSetSuccessfully() {
|
||||||
|
Date nowUtc = new Date();
|
||||||
|
TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);
|
||||||
|
|
||||||
|
Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore);
|
||||||
|
nowAsiaSingapore.setTime(nowUtc);
|
||||||
|
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN);
|
||||||
|
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
|
||||||
|
|
||||||
|
System.out.println(String.format("Java7: Time now in '%s' is '%s'", nowAsiaSingapore.getTimeZone()
|
||||||
|
.getID(), simpleDateFormat.format(nowAsiaSingapore.getTime())));
|
||||||
|
|
||||||
|
Assert.assertEquals(nowUtc.toInstant().getEpochSecond(), nowAsiaSingapore.toInstant().getEpochSecond());
|
||||||
|
Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getTimeZone());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJava8_ThenTimeZoneIsSetSuccessfully() {
|
||||||
|
Instant nowUtc = Instant.now();
|
||||||
|
ZoneId asiaSingapore = ZoneId.of(timeZone);
|
||||||
|
|
||||||
|
ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore);
|
||||||
|
|
||||||
|
System.out.println(String.format("Java8: Time now in '%s' is '%s'", nowAsiaSingapore.getZone(),
|
||||||
|
nowAsiaSingapore.format(DateTimeFormatter.ofPattern(PATTERN))));
|
||||||
|
|
||||||
|
Assert.assertEquals(nowUtc.getEpochSecond(), nowAsiaSingapore.toEpochSecond());
|
||||||
|
Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getZone());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenDateWithoutTimeZone_WhenSetTimeZoneUsingJodaTime_ThenTimeZoneIsSetSuccessfully() {
|
||||||
|
org.joda.time.Instant nowUtc = org.joda.time.Instant.now();
|
||||||
|
DateTimeZone asiaSingapore = DateTimeZone.forID(timeZone);
|
||||||
|
|
||||||
|
DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);
|
||||||
|
|
||||||
|
System.out.println(String.format("Joda-time: Time now in '%s' is '%s'", nowAsiaSingapore.getZone(),
|
||||||
|
nowAsiaSingapore.toString(PATTERN)));
|
||||||
|
|
||||||
|
Assert.assertEquals(nowUtc.toInstant().getMillis(), nowAsiaSingapore.toInstant().getMillis());
|
||||||
|
Assert.assertEquals(asiaSingapore, nowAsiaSingapore.getZone());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -31,3 +31,8 @@
|
||||||
- [How to Store Duplicate Keys in a Map in Java?](http://www.baeldung.com/java-map-duplicate-keys)
|
- [How to Store Duplicate Keys in a Map in Java?](http://www.baeldung.com/java-map-duplicate-keys)
|
||||||
- [Getting the Size of an Iterable in Java](http://www.baeldung.com/java-iterable-size)
|
- [Getting the Size of an Iterable in Java](http://www.baeldung.com/java-iterable-size)
|
||||||
- [Iterating Backward Through a List](http://www.baeldung.com/java-list-iterate-backwards)
|
- [Iterating Backward Through a List](http://www.baeldung.com/java-list-iterate-backwards)
|
||||||
|
- [How to Filter a Collection in Java](http://www.baeldung.com/java-collection-filtering)
|
||||||
|
- [Add Multiple Items to an Java ArrayList](http://www.baeldung.com/java-add-items-array-list)
|
||||||
|
- [Remove the First Element from a List](http://www.baeldung.com/java-remove-first-element-from-list)
|
||||||
|
- [How to Convert List to Map in Java](http://www.baeldung.com/java-list-to-map)
|
||||||
|
- [Initializing HashSet at the Time of Construction](http://www.baeldung.com/java-initialize-hashset)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import static org.apache.commons.collections4.CollectionUtils.emptyIfNull;
|
||||||
|
|
||||||
|
public class NullSafeCollectionStreamsUsingCommonsEmptyIfNull {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method shows how to make a null safe stream from a collection through the use of
|
||||||
|
* emptyIfNull() method from Apache Commons CollectionUtils library
|
||||||
|
*
|
||||||
|
* @param collection The collection that is to be converted into a stream
|
||||||
|
* @return The stream that has been created from the collection or an empty stream if the collection is null
|
||||||
|
*/
|
||||||
|
public Stream<String> collectionAsStream(Collection<String> collection) {
|
||||||
|
return emptyIfNull(collection).stream();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class NullSafeCollectionStreamsUsingJava8OptionalContainer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method shows how to make a null safe stream from a collection through the use of
|
||||||
|
* Java SE 8’s Optional Container
|
||||||
|
*
|
||||||
|
* @param collection The collection that is to be converted into a stream
|
||||||
|
* @return The stream that has been created from the collection or an empty stream if the collection is null
|
||||||
|
*/
|
||||||
|
public Stream<String> collectionAsStream(Collection<String> collection) {
|
||||||
|
return Optional.ofNullable(collection)
|
||||||
|
.map(Collection::stream)
|
||||||
|
.orElseGet(Stream::empty);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class NullSafeCollectionStreamsUsingNullDereferenceCheck {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method shows how to make a null safe stream from a collection through the use of a check
|
||||||
|
* to prevent null dereferences
|
||||||
|
*
|
||||||
|
* @param collection The collection that is to be converted into a stream
|
||||||
|
* @return The stream that has been created from the collection or an empty stream if the collection is null
|
||||||
|
*/
|
||||||
|
public Stream<String> collectionAsStream(Collection<String> collection) {
|
||||||
|
return collection == null ? Stream.empty() : collection.stream();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class NullSafeCollectionStreamsUsingCommonsEmptyIfNullUnitTest {
|
||||||
|
|
||||||
|
private final NullSafeCollectionStreamsUsingCommonsEmptyIfNull instance =
|
||||||
|
new NullSafeCollectionStreamsUsingCommonsEmptyIfNull();
|
||||||
|
@Test
|
||||||
|
public void whenCollectionIsNull_thenExpectAnEmptyStream() {
|
||||||
|
Collection<String> collection = null;
|
||||||
|
Stream<String> expResult = Stream.empty();
|
||||||
|
Stream<String> result = instance.collectionAsStream(collection);
|
||||||
|
assertStreamEquals(expResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCollectionHasElements_thenExpectAStreamOfExactlyTheSameElements() {
|
||||||
|
Collection<String> collection = Arrays.asList("a", "b", "c");
|
||||||
|
Stream<String> expResult = Arrays.stream(new String[] { "a", "b", "c" });
|
||||||
|
Stream<String> result = instance.collectionAsStream(collection);
|
||||||
|
assertStreamEquals(expResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void assertStreamEquals(Stream<?> s1, Stream<?> s2) {
|
||||||
|
Iterator<?> iter1 = s1.iterator(), iter2 = s2.iterator();
|
||||||
|
while (iter1.hasNext() && iter2.hasNext())
|
||||||
|
assertEquals(iter1.next(), iter2.next());
|
||||||
|
assert !iter1.hasNext() && !iter2.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class NullSafeCollectionStreamsUsingJava8OptionalContainerUnitTest {
|
||||||
|
|
||||||
|
private final NullSafeCollectionStreamsUsingJava8OptionalContainer instance =
|
||||||
|
new NullSafeCollectionStreamsUsingJava8OptionalContainer();
|
||||||
|
@Test
|
||||||
|
public void whenCollectionIsNull_thenExpectAnEmptyStream() {
|
||||||
|
Collection<String> collection = null;
|
||||||
|
Stream<String> expResult = Stream.empty();
|
||||||
|
Stream<String> result = instance.collectionAsStream(collection);
|
||||||
|
assertStreamEquals(expResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCollectionHasElements_thenExpectAStreamOfExactlyTheSameElements() {
|
||||||
|
Collection<String> collection = Arrays.asList("a", "b", "c");
|
||||||
|
Stream<String> expResult = Arrays.stream(new String[] { "a", "b", "c" });
|
||||||
|
Stream<String> result = instance.collectionAsStream(collection);
|
||||||
|
assertStreamEquals(expResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void assertStreamEquals(Stream<?> s1, Stream<?> s2) {
|
||||||
|
Iterator<?> iter1 = s1.iterator(), iter2 = s2.iterator();
|
||||||
|
while (iter1.hasNext() && iter2.hasNext())
|
||||||
|
assertEquals(iter1.next(), iter2.next());
|
||||||
|
assert !iter1.hasNext() && !iter2.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.baeldung.nullsafecollectionstreams;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class NullSafeCollectionStreamsUsingNullDereferenceCheckUnitTest {
|
||||||
|
|
||||||
|
private final NullSafeCollectionStreamsUsingNullDereferenceCheck instance =
|
||||||
|
new NullSafeCollectionStreamsUsingNullDereferenceCheck();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCollectionIsNull_thenExpectAnEmptyStream() {
|
||||||
|
Collection<String> collection = null;
|
||||||
|
Stream<String> expResult = Stream.empty();
|
||||||
|
Stream<String> result = instance.collectionAsStream(collection);
|
||||||
|
assertStreamEquals(expResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCollectionHasElements_thenExpectAStreamOfExactlyTheSameElements() {
|
||||||
|
Collection<String> collection = Arrays.asList("a", "b", "c");
|
||||||
|
Stream<String> expResult = Arrays.stream(new String[] { "a", "b", "c" });
|
||||||
|
Stream<String> result = instance.collectionAsStream(collection);
|
||||||
|
assertStreamEquals(expResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void assertStreamEquals(Stream<?> s1, Stream<?> s2) {
|
||||||
|
Iterator<?> iter1 = s1.iterator(), iter2 = s2.iterator();
|
||||||
|
while (iter1.hasNext() && iter2.hasNext())
|
||||||
|
assertEquals(iter1.next(), iter2.next());
|
||||||
|
assert !iter1.hasNext() && !iter2.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -38,3 +38,4 @@
|
||||||
- [Priority-based Job Scheduling in Java](http://www.baeldung.com/java-priority-job-schedule)
|
- [Priority-based Job Scheduling in Java](http://www.baeldung.com/java-priority-job-schedule)
|
||||||
- [A Custom Spring SecurityConfigurer](http://www.baeldung.com/spring-security-custom-configurer)
|
- [A Custom Spring SecurityConfigurer](http://www.baeldung.com/spring-security-custom-configurer)
|
||||||
- [Life Cycle of a Thread in Java](http://www.baeldung.com/java-thread-lifecycle)
|
- [Life Cycle of a Thread in Java](http://www.baeldung.com/java-thread-lifecycle)
|
||||||
|
- [Runnable vs. Callable in Java](http://www.baeldung.com/java-runnable-callable)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -168,3 +168,6 @@
|
||||||
- [Encrypting and Decrypting Files in Java](http://www.baeldung.com/java-cipher-input-output-stream)
|
- [Encrypting and Decrypting Files in Java](http://www.baeldung.com/java-cipher-input-output-stream)
|
||||||
- [How to Get the Size of an Object in Java](http://www.baeldung.com/java-size-of-object)
|
- [How to Get the Size of an Object in Java](http://www.baeldung.com/java-size-of-object)
|
||||||
- [Exception Handling in Java](http://www.baeldung.com/java-exceptions)
|
- [Exception Handling in Java](http://www.baeldung.com/java-exceptions)
|
||||||
|
- [Guide to Java Instrumentation](http://www.baeldung.com/java-instrumentation)
|
||||||
|
- [Getting a File’s Mime Type in Java](http://www.baeldung.com/java-file-mime-type)
|
||||||
|
- [Common Java Exceptions](http://www.baeldung.com/java-common-exceptions)
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class BufferedReaderExample {
|
||||||
|
|
||||||
|
protected static ArrayList<String> generateArrayListFromFile(String filename) throws IOException {
|
||||||
|
|
||||||
|
ArrayList<String> result = new ArrayList<>();
|
||||||
|
|
||||||
|
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
|
||||||
|
|
||||||
|
while (br.ready()) {
|
||||||
|
result.add(br.readLine());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class FileReaderExample {
|
||||||
|
|
||||||
|
protected static ArrayList<String> generateArrayListFromFile(String filename) throws IOException {
|
||||||
|
|
||||||
|
ArrayList<String> result = new ArrayList<>();
|
||||||
|
|
||||||
|
try (FileReader f = new FileReader(filename)) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
while (f.ready()) {
|
||||||
|
char c = (char) f.read();
|
||||||
|
if (c == '\n') {
|
||||||
|
result.add(sb.toString());
|
||||||
|
sb = new StringBuffer();
|
||||||
|
} else {
|
||||||
|
sb.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
result.add(sb.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FilesReadLinesExample {
|
||||||
|
|
||||||
|
protected static ArrayList<String> generateArrayListFromFile(String filename) throws IOException {
|
||||||
|
|
||||||
|
List<String> result = Files.readAllLines(Paths.get(filename));
|
||||||
|
|
||||||
|
return (ArrayList<String>) result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class ScannerIntExample {
|
||||||
|
|
||||||
|
protected static ArrayList<Integer> generateArrayListFromFile(String filename) throws IOException {
|
||||||
|
|
||||||
|
ArrayList<Integer> result = new ArrayList<>();
|
||||||
|
|
||||||
|
try (Scanner s = new Scanner(new FileReader(filename))) {
|
||||||
|
|
||||||
|
while (s.hasNext()) {
|
||||||
|
result.add(s.nextInt());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class ScannerStringExample {
|
||||||
|
|
||||||
|
protected static ArrayList<String> generateArrayListFromFile(String filename) throws IOException {
|
||||||
|
|
||||||
|
ArrayList<String> result = new ArrayList<>();
|
||||||
|
|
||||||
|
try (Scanner s = new Scanner(new FileReader(filename))) {
|
||||||
|
|
||||||
|
while (s.hasNext()) {
|
||||||
|
result.add(s.nextLine());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class BufferedReaderUnitTest {
|
||||||
|
|
||||||
|
protected static final String TEXT_FILENAME = "src/test/resources/sampleTextFile.txt";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenParsingExistingTextFile_thenGetArrayList() throws IOException {
|
||||||
|
List<String> lines = BufferedReaderExample.generateArrayListFromFile(TEXT_FILENAME);
|
||||||
|
assertTrue("File does not has 2 lines", lines.size() == 2);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class FileReaderUnitTest {
|
||||||
|
|
||||||
|
protected static final String TEXT_FILENAME = "src/test/resources/sampleTextFile.txt";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenParsingExistingTextFile_thenGetArrayList() throws IOException {
|
||||||
|
List<String> lines = FileReaderExample.generateArrayListFromFile(TEXT_FILENAME);
|
||||||
|
assertTrue("File does not has 2 lines", lines.size() == 2);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class FilesReadAllLinesUnitTest {
|
||||||
|
|
||||||
|
protected static final String TEXT_FILENAME = "src/test/resources/sampleTextFile.txt";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenParsingExistingTextFile_thenGetArrayList() throws IOException {
|
||||||
|
List<String> lines = FilesReadLinesExample.generateArrayListFromFile(TEXT_FILENAME);
|
||||||
|
assertTrue("File does not has 2 lines", lines.size() == 2);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ScannerIntUnitTest {
|
||||||
|
|
||||||
|
protected static final String NUMBER_FILENAME = "src/test/resources/sampleNumberFile.txt";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenParsingExistingTextFile_thenGetIntArrayList() throws IOException {
|
||||||
|
List<Integer> numbers = ScannerIntExample.generateArrayListFromFile(NUMBER_FILENAME);
|
||||||
|
assertTrue("File does not has 2 lines", numbers.size() == 2);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.fileparser;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ScannerStringUnitTest {
|
||||||
|
|
||||||
|
protected static final String TEXT_FILENAME = "src/test/resources/sampleTextFile.txt";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenParsingExistingTextFile_thenGetArrayList() throws IOException {
|
||||||
|
List<String> lines = ScannerStringExample.generateArrayListFromFile(TEXT_FILENAME);
|
||||||
|
assertTrue("File does not has 2 lines", lines.size() == 2);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
111
|
||||||
|
222
|
|
@ -0,0 +1,2 @@
|
||||||
|
Hello
|
||||||
|
World
|
|
@ -37,3 +37,4 @@
|
||||||
- [Create a Java and Kotlin Project with Maven](http://www.baeldung.com/kotlin-maven-java-project)
|
- [Create a Java and Kotlin Project with Maven](http://www.baeldung.com/kotlin-maven-java-project)
|
||||||
- [Reflection with Kotlin](http://www.baeldung.com/kotlin-reflection)
|
- [Reflection with Kotlin](http://www.baeldung.com/kotlin-reflection)
|
||||||
- [Get a Random Number in Kotlin](http://www.baeldung.com/kotlin-random-number)
|
- [Get a Random Number in Kotlin](http://www.baeldung.com/kotlin-random-number)
|
||||||
|
- [Idiomatic Logging in Kotlin](http://www.baeldung.com/kotlin-logging)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class CompanionObjectTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAClassWithCompanionObject_whenCallingMethodTheSameAsStaticOne_thenWeGetAResult() {
|
||||||
|
assertEquals("A", A.returnClassName())
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class A {
|
||||||
|
companion object {
|
||||||
|
fun returnClassName(): String {
|
||||||
|
return "A"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class ConstructorTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAClassWithPrimaryConstructor_whenCreatingAnInstance_thenWeGetObject() {
|
||||||
|
var example = Example(1, "Example")
|
||||||
|
|
||||||
|
assertEquals(1, example.id)
|
||||||
|
assertEquals("Example", example.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Example constructor(val id: Int, var name: String)
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertFalse
|
||||||
|
|
||||||
|
class DataClassTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenASampleDataClass_whenCallingToStringMethod_thenItReturnsAllProperties() {
|
||||||
|
val student = Student(1, "John", "Smith")
|
||||||
|
|
||||||
|
assertEquals(1, student.id)
|
||||||
|
assertEquals("John", student.name)
|
||||||
|
assertEquals("Smith", student.lastName)
|
||||||
|
assertEquals("Student(id=1, name=John, lastName=Smith)", student.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenASampleDataClass_whenCreatingACopyWithGeneratedFunction_thenItReturnsACopyWithRequestedChanges() {
|
||||||
|
val student = Student(1, "John", "Smith")
|
||||||
|
val student2 = student.copy(id = 2, name = "Anne")
|
||||||
|
|
||||||
|
assertEquals(2, student2.id)
|
||||||
|
assertEquals("Anne", student2.name)
|
||||||
|
assertEquals("Smith", student2.lastName)
|
||||||
|
assertEquals("Student(id=2, name=Anne, lastName=Smith)", student2.toString())
|
||||||
|
assertFalse(student.equals(student2))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
data class Student(val id: Int, val name: String, val lastName: String)
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class DelegationTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAClassWithDelegation_whenCallDelegatedMethod_thenWeGetAResultDefinedInPassedObject() {
|
||||||
|
val car = Car(V6Engine())
|
||||||
|
|
||||||
|
assertEquals("Vroom", car.makeSound())
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Engine {
|
||||||
|
fun makeSound(): String
|
||||||
|
}
|
||||||
|
|
||||||
|
class V6Engine: Engine {
|
||||||
|
override fun makeSound(): String {
|
||||||
|
return "Vroom"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Car(e: Engine) : Engine by e
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import java.io.IOException
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class ExceptionsTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenATryExpression_whenReturning5InLastExpressionOfTryBlock_thenWeGet5() {
|
||||||
|
val value: Int = try { 5 } catch (e: IOException) { 6 }
|
||||||
|
|
||||||
|
assertEquals(5, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenATryExpression_whenReturning6InLastExpressionOfCatchBlock_thenWeGet6() {
|
||||||
|
val value: Int = try { funThrowingException() } catch (e: IOException) { 6 }
|
||||||
|
|
||||||
|
assertEquals(6, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
@org.junit.Test(expected = IllegalArgumentException::class)
|
||||||
|
fun givenANullString_whenUsingElvisOperator_thenExceptionIsThrown() {
|
||||||
|
val sampleString: String? = null
|
||||||
|
|
||||||
|
val length: Int = sampleString?.length ?: throw IllegalArgumentException("String must not be null")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun funThrowingException(): Nothing {
|
||||||
|
throw IOException()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class ExtensionFunctionsTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAStringWithAnExtensionFunction_whenCallingThatFunction_thenItConcatenatesStrings() {
|
||||||
|
val sampleString = "ABC"
|
||||||
|
val concatenatedString = sampleString.appendString("DEF")
|
||||||
|
|
||||||
|
assertEquals("ABCDEF", concatenatedString)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAStringWithAnExtensionProperty_whenReadingProperty_thenItReturnsLengthOfString() {
|
||||||
|
val sampleString = "ABC"
|
||||||
|
|
||||||
|
assertEquals(3, sampleString.size)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun String.appendString(str : String): String {
|
||||||
|
return plus(str)
|
||||||
|
}
|
||||||
|
|
||||||
|
val String.size: Int
|
||||||
|
get() = length
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class FunctionsTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenALambdaExpressionConcatenatingString_whenUsingTheFunctionWithAAndBString_thenWeGetAB() {
|
||||||
|
val concat: (String, String) -> String = { a, b -> a + b }
|
||||||
|
|
||||||
|
assertEquals("AB", concat("A","B"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAnAnonymousFunctionConcatenatingString_whenUsingTheFunctionWithAAndBString_thenWeGetAB() {
|
||||||
|
val concat: (String, String) -> String = fun(a: String, b: String): String { return a + b }
|
||||||
|
|
||||||
|
assertEquals("AB", concat("A","B"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAnPlusMethodOfString_whenUsingTheFunctionWithAAndBString_thenWeGetAB() {
|
||||||
|
val concat = String::plus
|
||||||
|
|
||||||
|
assertEquals("AB", concat("A","B"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAStringConstractorAssignedToFunction_whenUsingFunctionReference_thenWeGetNewString() {
|
||||||
|
val concat = ::String
|
||||||
|
|
||||||
|
assertEquals("A", concat().plus("A"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAClassImplementingAFunctionType_whenUsingTheFunctionWithAAndBString_thenWeGetAB() {
|
||||||
|
val concat = StringConcatenation()
|
||||||
|
|
||||||
|
assertEquals("AB", concat("A", "B"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenALambdaExpressionWithReceiver_whenUsingTheFunctionWithReceiver_thenWeGetABC() {
|
||||||
|
val concat: String.(String, String) -> String = { a, b -> plus(a).plus(b) }
|
||||||
|
|
||||||
|
assertEquals("ABC", "A".concat("B", "C"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenALambdaExpressionWithinLambdaExpression_whenUsingTheFunction_thenWeGetAB() {
|
||||||
|
val concat: (String) -> ((String) -> String) = { a -> {b -> a + b} }
|
||||||
|
|
||||||
|
assertEquals("AB", (concat("A")("B")))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun given3NestedLambdaExpression_whenUsingTheFunction_thenWeGetABC() {
|
||||||
|
val concat: (String) -> (String) -> (String) -> String = { a -> {b -> { c -> a + b + c} } }
|
||||||
|
|
||||||
|
assertEquals("ABC", concat("A")("B")("C"))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class StringConcatenation: (String, String) -> String {
|
||||||
|
override fun invoke(p1: String, p2: String): String {
|
||||||
|
return p1 + p2
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.math.absoluteValue
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class IsOperatorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenSampleValue_whenUsingIsOperatorInIfStatement_thenItCastsAutomaticallyToString() {
|
||||||
|
val value: Any = "string"
|
||||||
|
|
||||||
|
if(value is String) {
|
||||||
|
assertEquals(6, value.length)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenSampleValue_whenUsingIsOperatorWithAndOperator_thenItCastsAutomaticallyToString() {
|
||||||
|
val value: Any = "string"
|
||||||
|
|
||||||
|
assertTrue(value is String && value.length == 6)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenSampleValue_whenUsingWithWhenOperator_thenItCastsAutomaticallyToString() {
|
||||||
|
val value: Any = "string"
|
||||||
|
|
||||||
|
when(value) {
|
||||||
|
is String -> assertEquals(6, value.length)
|
||||||
|
is Int -> assertEquals(6, value.absoluteValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import kotlin.test.Test
|
||||||
|
import java.lang.NullPointerException
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertNotNull
|
||||||
|
import kotlin.test.assertNull
|
||||||
|
|
||||||
|
class NullSafetyTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenStringAndNull_whenUsingSafeCallOperatorWithLengthMethod_thenReturnsLengthForStringAndNullForNull() {
|
||||||
|
val stringValue: String? = "string"
|
||||||
|
val nullValue: String? = null
|
||||||
|
|
||||||
|
assertNotNull(stringValue?.length)
|
||||||
|
assertNull(nullValue?.length)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = NullPointerException::class)
|
||||||
|
fun givenNullReference_whenUsingTheNotNullAssertionOperator_thenItThrowsNullPointerException() {
|
||||||
|
val stringValue: String? = "string"
|
||||||
|
val nullValue: String? = null
|
||||||
|
|
||||||
|
assertNotNull(stringValue!!.length)
|
||||||
|
nullValue!!.length
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenStringAndNull_whenUsingElvisOperator_thenItTestsAgainstNullAndReturnsTheProperValue() {
|
||||||
|
val stringValue: String? = "string"
|
||||||
|
val nullValue: String? = null
|
||||||
|
|
||||||
|
val shouldBeLength: Int = stringValue?.length ?: -1
|
||||||
|
val souldBeMinusOne: Int = nullValue?.length ?: -1
|
||||||
|
|
||||||
|
assertEquals(6, shouldBeLength)
|
||||||
|
assertEquals(-1, souldBeMinusOne)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenString_whenCastingToInt_thenItReturnsNull() {
|
||||||
|
val stringValue: String? = "string"
|
||||||
|
|
||||||
|
val intValue: Int? = stringValue as? Int
|
||||||
|
|
||||||
|
assertNull(intValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenCollectionWithNulls_whenFilterNonNull_thenItReturnsCollectionWithoutNulls() {
|
||||||
|
val list: List<String?> = listOf("a", "b", null)
|
||||||
|
val nonNullList = list.filterNotNull()
|
||||||
|
|
||||||
|
assertEquals(2, nonNullList.size)
|
||||||
|
assertEquals(nonNullList, listOf("a", "b"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenCollectionWithNulls_whenLetWithSafeCallOperator_thenItOmitsNulls() {
|
||||||
|
val list: List<String?> = listOf("a", "b", null)
|
||||||
|
for(elem in list) {
|
||||||
|
elem?.let { assertNotNull(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class OperatorsOverloadingTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenThePlaneClassWithOverloadedIncrementationOperator_whenCallingTheOperator_thenItIncreasesSpeed(){
|
||||||
|
var plane = Plane(0.0)
|
||||||
|
|
||||||
|
plane++
|
||||||
|
assertEquals(50.0, plane.currentSpeed)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenThePlaneClassWithOverloadedMinusOperator_whenCallingTheOperator_thenItDecreaseSpeed(){
|
||||||
|
var plane = Plane(1000.0)
|
||||||
|
|
||||||
|
plane - 500.0
|
||||||
|
assertEquals(500.0, plane.currentSpeed)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenThePlaneClassWithOverloadedInvokeOperator_whenCallingTheOperator_thenItSetSpeed(){
|
||||||
|
var plane = Plane(0.0)
|
||||||
|
|
||||||
|
plane(150.0)
|
||||||
|
assertEquals(150.0, plane.currentSpeed)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun given2PlaneObjectWithOverloadedComparisonOperator_whenCallingTheOperator_thenItComparesSpeedValues(){
|
||||||
|
var plane = Plane(0.0)
|
||||||
|
var plane2 = Plane(150.0)
|
||||||
|
|
||||||
|
assertTrue(plane < (plane2))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Plane(var currentSpeed: Double) {
|
||||||
|
|
||||||
|
operator fun inc(): Plane {
|
||||||
|
currentSpeed += 50.0
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun minus(number: Double) {
|
||||||
|
currentSpeed = if(currentSpeed < number) 0.0 else currentSpeed - number
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun invoke(speed: Double) {
|
||||||
|
currentSpeed = speed
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun compareTo(plane: Plane): Int {
|
||||||
|
return currentSpeed.compareTo(plane.currentSpeed)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.baeldung.kotlinvsjava
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import java.math.BigDecimal
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class PropertiesTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenASampleClassWithValAndVarProperties_whenSettingPrice_thenWeGetZeroOrOne() {
|
||||||
|
val product = Product()
|
||||||
|
product.price = BigDecimal(10)
|
||||||
|
|
||||||
|
val product2 = Product()
|
||||||
|
product2.price = null
|
||||||
|
|
||||||
|
assertEquals("empty", product.id)
|
||||||
|
assertEquals("empty", product2.id)
|
||||||
|
assertEquals(BigDecimal(10), product.price)
|
||||||
|
assertEquals(BigDecimal(1), product2.price)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Product {
|
||||||
|
|
||||||
|
val id: String? = "empty"
|
||||||
|
|
||||||
|
var price: BigDecimal? = BigDecimal.ZERO
|
||||||
|
set(value) = if(value == null) { field = BigDecimal.ONE} else { field = value }
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -3,3 +3,4 @@
|
||||||
- [Guide to EJB Set-up](http://www.baeldung.com/ejb-intro)
|
- [Guide to EJB Set-up](http://www.baeldung.com/ejb-intro)
|
||||||
- [Java EE Session Beans](http://www.baeldung.com/ejb-session-beans)
|
- [Java EE Session Beans](http://www.baeldung.com/ejb-session-beans)
|
||||||
- [Introduction to EJB JNDI Lookup on WildFly Application Server](http://www.baeldung.com/wildfly-ejb-jndi)
|
- [Introduction to EJB JNDI Lookup on WildFly Application Server](http://www.baeldung.com/wildfly-ejb-jndi)
|
||||||
|
- [A Guide to Message Driven Beans in EJB](http://www.baeldung.com/ejb-message-driven-beans)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue